【发布时间】:2014-09-27 03:43:17
【问题描述】:
编辑 3:找到解决方案/修复
这是为我解决它的 SO 线程:PageMod attaching worker to same URL multiple times
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 返回 null/undefined。但是,它可以正常工作一次——从内容脚本中提取 URL,然后正确地传递回 main.js 文件。但是,再次运行的内容脚本会立即将其清除。
【问题讨论】:
标签: firefox firefox-addon firefox-addon-sdk