繁体   English   中英

Firefox插件-在页面上运行脚本

[英]Firefox addon - run script on page

使用Addon SDK,我尝试在每次页面加载时将脚本注入页面。 为了测试,插件正在尝试向窗口对象添加变量,页面应该读取它。 运行此命令时,我可以看到“正在注入”警报,但是页面显示错误“未定义的属性window.myVar”。 我究竟做错了什么? 顺便说一句,我不想​​使用unsafeWindow。

main.js:

var data = require("sdk/self").data;
var pageMod = require("sdk/page-mod");

pageMod.PageMod({
    include: "*",
    contentScriptFile: data.url("inject.js"),
    contentScriptWhen: "start",
    onAttach: function(worker) {
        worker.port.emit("inject", "unused param");
    }
});

inject.js

function inject(arg) {
    var script = document.createElement("script");
    script.innerHTML = 'alert("injecting"); window.myVar=54564;';
    document.head.appendChild(script);
}
self.port.on("inject", inject);

page.html

<html>
  <head>
  </head>
  <body>
    <script>
      alert(window.myVar);
    </script>
  </body>
</html>

编辑:我尝试了canuckistani的代码,它显示了一些奇怪的行为。 顺便说一句,我在Firefox 31上。这是我的代码

function inject(arg) {
    var myVar = 123;
    unsafeWindow.myVar = cloneInto(myVar, unsafeWindow);
}
self.port.on("inject", inject);

和页面

<html>
  <head>
  </head>
  <body>
    <script>
      alert(window.myVar); <!--This shows empty alert box-->
      alert(window.myVar); <!--This shows alert box with right value (123)-->
    </script>
  </body>
</html>

从Firefox 30(将近2个版本!)开始,您可以使用一些新的API来执行此操作。 看起来像:

let myVar = {1:2};

self.port.on("inject", function() {
    unsafeWindow.myVar = cloneInto(myVar, unsafeWindow);
});

有关更多信息, 请参见此博客文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM