#javascript #jquery #google-chrome-extension
#javascript #jquery #google-chrome-расширение
Вопрос:
Я пишу расширение Chrome, и мне нужно отправить сообщение из панели devtools, которую я создал, в сценарий содержимого. Я уже сделал это:
devtools.js
$(function () {
inputField.trigger('focus')
chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {content: 'content'})
chrome.runtime.onMessage.addListener(function (message) {
if (!jQuery.isEmptyObject(message.pageHTML)) {
pageHTML = message.pageHTML
}
})
})
})
content.js
chrome.runtime.sendMessage(extensionID, {pageHTML: $('html').html()});
Но это работает только тогда, когда devtools прикреплен к любой стороне вкладки, например, справа.
Когда я открываю devtools как отдельное окно, скрипт теряет связь со скриптом содержимого, и у меня возникает ошибка:
Ответ на обработку ошибок: TypeError: не удается прочитать свойство ‘id’ неопределенного
Итак, как мне это исправить?
Комментарии:
1. Используйте chrome.devtools.inspectedWindow.eval с
useContentScriptContext: true
помощью для прямого вызова некоторой глобальной функции в вашем скрипте содержимого.
Ответ №1:
Вы можете получить идентификатор проверяемого окна с помощью chrome.devtools.inspectedWindow.tabId.
devtools.js
$(function () {
inputField.trigger('focus')
chrome.tabs.sendMessage(chrome.devtools.inspectedWindow.tabId, {content: 'content'})
chrome.runtime.onMessage.addListener(function (message) {
if (!jQuery.isEmptyObject(message.pageHTML)) {
pageHTML = message.pageHTML
}
})
})
SendMessage принимает обработчик ответа, с помощью которого вы, возможно, могли бы удалить прослушиватель, который вы регистрируете сразу после отправки сообщения. Подробная информация