Я учусь создавать расширения Chrome, и я стараюсь следовать одной из инструкций в официальном руководстве here.DOM Exception 12 для window.postMessage
То, что я пытаюсь сделать это:
- background.js показывает действие страницы для целенаправленных URL.
- Действие страницы выполняет скрипт при нажатии.
- Выполненный скрипт вводит javascript на странице.
До сих пор так хорошо! Я использую следующий скрипт для ввода на страницу.
var injectJS = function(url, cb) {
var h = document.getElementsByTagName('head')[0],
s = document.createElement('script');
s.type = 'text/javascript';
s.src = url;
if (cb)
s.onload = cb;
h.appendChild(s);
};
injectJS(chrome.extension.getURL('script/do_something.js'));
Теперь я хочу, чтобы инъецируемый скрипт мог связываться с расширением.
Кажется, что я ищу то, что описано в документации.
https://developer.chrome.com/extensions/content_scripts.html#host-page-communication
Проблема заключается в том, когда я пытаюсь сделать window.postMessage
консоль показывает ошибка «DOM Exception 12».
Редактировать: Первая проблема с кодом примера была решена.
Другая ошибка я получаю, от smae код из port.postMessage
:
Uncaught Error: Attempting to use a disconnected port object
Вот код:
var port = chrome.runtime.connect();
// Respond to messages from the injected script to collect results
window.addEventListener('message', function(e) {
if (e.source != window)
return;
if (e.data.type && (e.data.type == 'FROM_PAGE')) {
console.log('Content script received: %s', e.data.text);
port.postMessage(e.data.text);
}
}, false);
В основном я пытаюсь сохраняться некоторые данные временно, пока страничке перезагружается , Скрипт/сценарий содержимого собирает данные, а затем загружает следующую страницу. Фоновый сценарий должен содержать результаты, пока не будут загружены все страницы.
Спасибо, это был именно он! Я должен был уделять более пристальное внимание образцу. Еще один вопрос, если вы не возражаете. Продолжая работу с тем же кодом, часть 'port.postMessage' теперь не работает. Сценарий моего слушателя запускается, и я регистрирую данные, чтобы убедиться, что он существует, но теперь он говорит, что порт закрыт. –
Затем один из концов погиб. Не могу точно указать причину, не видя свой код. –
Я обновил исходное сообщение с некоторыми дополнительными деталями, если это поможет. –