我正在加载内容脚本(1.js
),该脚本在某些时候附加了<script>
-element,指向扩展中的文件(2.js
)。内容脚本不能包含2.js
。与Chrome扩展中的内容脚本中的页面脚本进行通信
有没有办法使用2.js
内定义的变量从1.js
?
我正在加载内容脚本(1.js
),该脚本在某些时候附加了<script>
-element,指向扩展中的文件(2.js
)。内容脚本不能包含2.js
。与Chrome扩展中的内容脚本中的页面脚本进行通信
有没有办法使用2.js
内定义的变量从1.js
?
在您的背景页面和内容脚本之间使用message passing。后台页面保存该值(通过将2.js
作为脚本加载,或者将2.js
本身作为应用程序的后台脚本)并使用chrome.extension.onRequest.addListener
监听传入消息。内容脚本发送请求,并且内容脚本发送具有期望值的响应。
我想通了。有点肮脏,但与一个动态的对象,我有问题。
我只是通过将所有代码注入页面来添加代码。这里是我的内容脚本:
var path = document.createElement('div');
path.id = 'codearea-path';
path.innerHTML = chrome.extension.getURL('/');
path.style.display = 'none';
document.body.appendChild(path);
var script = document.createElement('script');
script.src = chrome.extension.getURL('1.js');
document.head.appendChild(script);
然后我用同一种代码,包括2.js
内1.js
。
当然,这是行得通的 - 我认为这种行为是超出界限的,但是,既然你说过2.js'不能用于内容脚本(但我想我现在明白你的意思了不应该在加载时每次加载 - 动态注入是可以的,是吗?)。我相信你也可以在你的背景页面中使用'chrome.tabs.executeScript('2.js')'。 – apsillers
你是对的,请原谅我的任何困惑。我也会考虑使用'executeScript()',但目前扩展并不需要一个背景页面。 –
该变量是一个对象。应该提到这一点。 –
我相信消息传递适用于没有循环引用的对象。如果你的对象有循环引用,那会让事情变得更加困难,因为它们不能被串化 - 你可能只需要去除它们。 – apsillers