【发布时间】:2017-11-19 10:18:13
【问题描述】:
将扩展从 Chrome 移植到 FF
遵循本教程(在 Chrome 中运行良好):http://www.codingscripts.com/check-whether-user-has-a-chrome-extension-installed/
从网页向扩展发送消息: 在 (web)pagescript.js 中有:
function IsExist(extensionId,callback){
chrome.runtime.sendMessage(extensionId, { message: "installed" },
function (reply) {
if (reply) {
callback(true);
}else{
callback(false);
}
});
}
IsExist("Your extension id",function(installed){
if(!installed){
alert("Please install extension ");
}
});
在扩展中接收来自网页的消息:
chrome.runtime.onMessageExternal.addListener(
function(req, sender, callback) {
if (req) {
if (req.message) {
if (req.message == "installed") {
callback(true);
}
}
}
return true;
});
我正在努力实现的目标
未安装扩展程序时,我网站上的几个 html 页面需要重定向回主页。因此,这些页面需要能够(自行)确定是否安装了扩展。
我在打开网页时遇到错误
ReferenceError : chrome 未定义。 (我也尝试过 browser.runtime.onMessageExternal 但它抛出“浏览器”未定义)。 有没有办法做到这一点类似于在 Chrome 中可以做到的?
【问题讨论】:
-
当我将 chrome.runtime.onMessageExternal 更改为 browser.runtime.onMessageExternal 时,我遇到了同样的错误,但使用“浏览器未定义”而不是“chrome 未定义”。
-
嗯,清单中有“externally_connectable”吗?我不是 FF 方面的专家,所以我只能说它是 not listed in supported keys。
-
是的,我已将我的域添加到“externally_connectable”中。我编辑了我的帖子并添加了“我想要实现的目标”,以更好地说明我的问题的目的以及为什么我需要 browser.runtime.sendMessage 在我的网页中,而不是在扩展内容脚本中。 (因为我知道它在那里工作)
-
是的,您需要在页面上注入内容脚本以接收消息并发布另一个回复。
-
使用
document_idle或document_end使其不确定(在一般情况下)您的网页脚本或您的扩展首先执行,因为那些run_at声明没有保证时间(顺序wrt. 页面脚本)它们执行(发生的情况取决于您网页的内容)。在这种情况下,或者至少作为一般建议,我的首选是document_start,因为这样可以保证当您在网页脚本中检查扩展程序的标志时,它会存在。显然,还有其他方法可以保证这一点,但这对我来说是最简单的。
标签: google-chrome-extension firefox-addon-webextensions