我正在使用内容脚本(content_script.js
)将脚本(main.js
)注入网页。
manifest.json:
{
"manifest_version": 2,
"content_scripts": [
{
"run_at": "document_end",
"js": ["content_script.js"]
}
],
"options_page": "options.html",
"options_ui": {
"page": "options.html",
"open_in_tab": true
},
"web_accessible_resources": [
"main.js"
],
"permissions": ["tabs", "storage"]
}
content_script.js:
var s = document.createElement('script');
s.src = chrome.extension.getURL('main.js');
(document.head||document.documentElement).appendChild(s);
s.onload = function() {
s.parentNode ? s.parentNode.removeChild(s) : null;
};
我在chrome.storage.local
中存储了一些数据(在options.js
文件中设置),需要在Web可访问资源(在这种情况下为main.js
)中读取这些数据。
到目前为止,我发现的唯一解决方案是在内容脚本中创建一个自定义事件,并在main.js
文件中收听它,如下所示:>
content_script.js
:chrome.storage.local.get(foo, function(result) {
var event = new CustomEvent("ExtensionOptionsRead", { detail: result });
window.dispatchEvent(event);
});
main.js
:window.addEventListener("ExtensionOptionsRead", function(event) {
window.extensionOptions = event.detail
})
但是当我得到Error: Permission denied to access property xyz
时,这在Firefox上不起作用。
有人知道将内容脚本中的数据发送到Web可访问资源的另一种方法吗?
我正在使用内容脚本(content_script.js)将脚本(main.js)注入网页。 manifest.json:{“ manifest_version”:2,“ content_scripts”:[{“ run_at”:“ document_end”,...
该文档建议我们使用window.postMessage
。它允许我们发送JSON.stringify()
可接受的任何数据。https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#Communicating_with_the_web_page