如何从内容脚本向网络可访问资源发送数据?

问题描述 投票:0回答:1

我正在使用内容脚本(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”,...

javascript google-chrome-extension firefox-webextensions
1个回答
0
投票

该文档建议我们使用window.postMessage。它允许我们发送JSON.stringify()可接受的任何数据。https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#Communicating_with_the_web_page

© www.soinside.com 2019 - 2024. All rights reserved.