编辑3:找到解决方案/修复
这是为我解决的SO线程:PageMod多次将worker附加到同一URL
TLDR:如果页面包含iFrame,它将在其上附加一个工作程序/内容脚本,从而导致尝试运行多个内容脚本。使用attachTo: 'top'
仅将脚本附加到顶级文档,而不附加iFrame。
我正在努力移植我制作的一个简单的Chrome扩展程序,并且在传递Firefox插件的消息时遇到了麻烦。这就是我所拥有的。
csScript.js
self.port.emit("url", getVideoUrl());
function getVideoUrl() {
return $('meta[itemprop=contentURL]').prop('content');
}
main.js
pageMod.PageMod({
include: [URLs],
exclude: [URLs],
contentScriptFile: [data.url("jquery-2.1.1.min.js"),
data.url("csScript.js")],
onAttach: function(worker) {
worker.port.on("url", function(url) {
var videoUrl = validateUrl(url);
});
}
});
当某个URL被命中时,我想获取一个属性值并将其发送回我的main.js并使用它。由于现在有效,因此出现message is null
错误。我已经阅读了文档,但似乎无法理解如何传递消息。
编辑:更改onAttach
为:
onAttach: function(worker) {
worker.port.on("url", function(url) {
var videoUrl = validateUrl(url);
});
}
});
似乎变化不大。我要做的就是将内容脚本中的一个字符串传递回我的main.js
文件。然而,上面的代码,它告诉我说url
是null
。我浏览过的所有文档似乎都表明这是Firefox插件中消息传递的工作方式。
Edit2:添加一些日志语句后,我注意到了几件事:
1)匹配URL时,我的内容脚本运行了10次以上。我不知道为什么 该脚本已附加到每个iFrame。
2)大多数情况下,URL返回空值/未定义。但是,它只能正常工作一次-从内容脚本中提取URL,然后将其正确传递回main.js
文件。但是,再次运行的内容脚本会立即将其清除。
在pageMod
构造函数中,使用该attachTo: 'top'
选项会将脚本仅附加到顶层文档。内容脚本已附加到其他iFrame,然后尝试运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句