#google-chrome #google-chrome-extension
#google-chrome #google-chrome-расширение
Вопрос:
Я разрабатываю расширение Chrome, скажем, когда пользователь нажимает кнопку расширения, если веб-сайты находятся в списке «известные веб-сайты», они будут перенаправлены на соответствующие страницы, которые я создал для этого веб-сайта.
Моя идея заключается в том, что:
- В фоновом режиме.js У меня есть chrome.browserAction.onClicked.addListener, который chrome.tabs.SendMessage(activeTab.id , { «сообщение»: «clicked_browser_action» }) вот так:
chrome.browserAction.onClicked.addListener(function () {
chrome.tabs.sendMessage(activeTab.id, { "message": "clicked_browser_action" })
})
- В Content.js
Существует chrome.runtime.onMessage.addListener, он делает что-то вроде:
chrome.runtime.onMessage.addListener(
function (request) {
if (request.message === "clicked_browser_action") {
const domain = window.location.hostname
chrome.runtime.sendMessage({"message": "go_to_info_page", "url": domain})
}
}
)
- А затем вернуться к background.js , он получает сообщение, отправленное с content.js , и обновляет URL-адрес вкладки (или создает новую вкладку).
chrome.runtime.onMessage.addListener(
function (request) {
if (request.message === "go_to_info_page") {
chrome.tabs.update({"url": request.url})
return true;
}
}
)
Это работает отлично, но в случае, когда страница загружается очень медленно, и пользователь сразу нажимает кнопку, это не работает. Я подозреваю, что onMessage.addListener не работает до тех пор, пока страница не загрузится. Но потратил часы, я до сих пор не знаю, как это решить. Любая помощь была бы очень признательна!!
Я подумал об обходном пути, который возвращает URL в background.js так что никакого SendMessage не требуется. Это хороший подход?
Комментарии:
1. Вы можете просто сделать это из фонового скрипта:
chrome.tabs.query({active: true, currentWindow: true}, (tabs) => { const domain = new URL(tabs[0].url).hostname })