我的插件使用内容脚本与页面交互。但它也需要访问页面的javascript,以便运行页面的某个例程。因此,我的内容脚本需要访问页面的脚本上下文。
这就是我的意思。
Addon使用main.js访问content.js,并使用消息进行通信。
但是网页(正在向其中注入content.js)有自己的javascript。我的content.js需要访问该上下文,这样它才能从那里的变量中获取值。
一个人怎么能得到它?
我一直在阅读这些mdn文档,但它们似乎是在谈论一个你自己编写的html页面,就像你对首选项页面所做的那样。但在我的情况下,我正在与一个外部网站合作,而不是仅仅为插件编码的东西。
MDN页面上列出的方法也适用于外部页面,而不仅仅适用于您自己的页面。
即unsafeWindow.myPageVar
将起作用。
这是有效的:
var script = document.createElement("script");
script.innerHTML = "alert( myPageVar );";
document.body.appendChild( script );
这要归功于这个家伙。
然而,我不知道这是否是最好的方法。我希望其他比我更有见识的人能回答。
以下是如何返回值:
var retval = unsafeWindow.SomePageFunction();
alert(retval);
它被称为"不安全",因为你永远不知道页面的内容可能会被更改或更改。插件与页面脚本交互时就是这样。