兩者都可以透過 chrome.runtime.onMessage.addListener 接收訊息,比較特別的是,popup.script 需要透過 chrome.tabs.sendMessage 才能傳遞訊息給 content.script。
另外,popup.script 在傳遞訊息時,content.script 必須已經存在,大部分會有問題都是因為 content.script 是透過 chrome.tabs.executeScript 來執行 content.script,故應該使用以下的方法才能確保先後順序。
chrome.tabs.executeScript(null, {
file: "js/gethtml.js"
}, function() {
if (chrome.runtime.lastError) {
let errorMsg = chrome.runtime.lastError.message;
showMessage('error : \n' + errorMsg);
} else {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {action: 'getIgnored', ignored: ignored});
});
}
});
不過根據實測似乎會有一些問題,我遇到的問題是我有發送 ajax request,但會收到莫名其妙的 ajax response,待驗證。
2020/03/12 更新
如果只是要簡單的交換資料,其實在 content.script 裡面直接使用 storage API 應該是比較簡單。之前試的時候不成功,但今天卻是正常的。
2020/03/17 更新
改成在 manifest.json 直接加入 content.script,並指定執行時間為 "document_end",目前測試起來一切正常。
"content_scripts": [
{
"matches": ["https://member.readmoo.com/order"],
"js": ["js/gethtml.js"],
"run_at": "document_end"
}
]
沒有留言:
張貼留言