[英]What is the best way to run background script in firefox Addon script?
[英]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.