我正在學習構建Chrome擴展程序,我正在嘗試使用官方指南here中的說明之一。DOM例外12 for 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異常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'部分現在不能工作。我的偵聽器腳本運行,並記錄數據以驗證它是否存在,但現在它說端口已關閉。 –
然後其中一個死亡。如果沒有看到您的代碼,則無法確切說明原因。 –
我更新了一些額外的細節,如果有幫助的原始帖子。 –