Javascript 是否允许Chrome扩展通过内容脚本读取页面脚本内容

Javascript 是否允许Chrome扩展通过内容脚本读取页面脚本内容,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我目前正在创建一个Chrome扩展。但谷歌官方禁止该扩展访问网页中定义的变量或函数: 但是,内容脚本有一些限制。他们不能: Use chrome.* APIs (except for parts of chrome.extension) Use variables or functions defined by their extension's pages Use variables or functions defined by web pages or by other content s

我目前正在创建一个Chrome扩展。但谷歌官方禁止该扩展访问网页中定义的变量或函数:

但是,内容脚本有一些限制。他们不能:

Use chrome.* APIs (except for parts of chrome.extension)
Use variables or functions defined by their extension's pages
Use variables or functions defined by web pages or by other content scripts
更新:

页面中有许多脚本标记,如:

 <script>...<script>
 <script>...<script>
 <script>...<script> 
 <script>
 $config = {};
 $config.a = 1;
 $config.b = 5; 
 function getConfig() {  ...
   // some code  return config; 
 }
 </script> 
 <script>...<script>
 <script>...<script>
。。。
...
... 
$config={};
$config.a=1;
$config.b=5;
函数getConfig(){。。。
//一些代码返回配置;
}
...
...
是否有任何方法可以从内容脚本读取$config和函数getConfig()?或者这是不可能的


谢谢

正如您可能注意到的chrome.*API只能由后台页面或其他特定于插件的页面使用。另一方面,内容脚本可以访问页面,但不能使用chrome.*API

您需要做的是使用内容扩展访问页面上的任何内容,然后将包含数据的消息发送回后台页面。然后,后台页面可以使用数据和chrome.*API

这些文档在内容脚本和后台页面之间传递消息方面有很好的示例和文档

更新 您只能发送包含JSON对象的消息。换句话说,您不能发送getConfig函数。但是您可以在示例中发送$config。如果$config对象不是JSON,则需要以某种方式序列化它

无法控制页面上的代码

contentscript.js

background.js


谢谢Eduardo,我需要的只是读取页面变量和函数。我现在知道了如何与背景页面的内容脚本进行通信。但我不知道你提供的介绍我能做什么:(他们目前唯一的解决方案是传输document.scripts并分析字符串。但是如果页面更改了某些内容,这太困难和不稳定了。因此,也许您应该在问题@awqiruiguo中包含一个具体的示例。非常感谢您的更新,恐怕您误解了我。“$config”变量不是我在contentscript中定义的,而是在页面中定义的(页面不是我控制的)。我实际上想访问页面中的变量(就像我可以访问DOM节点一样)。没问题。内容脚本在页面上运行。您可以使用它获取窗口命名空间上的数据或查询DOM节点。我更新了示例以反映这一点。
$config = {};
$config.a = 1;
$config.b = 5;
function getConfig(){return $config;}

chrome.extension.sendMessage({type: 'config', content: getConfig()}, function(response) {
  console.log(response.status);
});
chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.tab ?
                "from a content script:" + sender.tab.url :
                "from the extension");
    if (request.type == "config") {
        // DO SOMETHING WITH request.config here
        sendResponse({status: "OK"});
    }
    sendResponse({status: "Unknown request type"});
  });