Chrome 现在可以将消息从网站发送到扩展程序。
所以在扩展 background.js(content.js 不起作用)中添加如下内容:
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
if (request) {
if (request.message) {
if (request.message == "version") {
sendResponse({version: 1.0});
}
}
}
return true;
});
这将让您从网站拨打电话:
var hasExtension = false;
chrome.runtime.sendMessage(extensionId, { message: "version" },
function (reply) {
if (reply) {
if (reply.version) {
if (reply.version >= requiredVersion) {
hasExtension = true;
}
}
}
else {
hasExtension = false;
}
});
然后您可以检查 hasExtension 变量。唯一的缺点是调用是异步的,所以你必须以某种方式解决这个问题。
编辑:
如下所述,您需要向 manifest.json 添加一个条目,其中列出了可以向您的插件发送消息的域。例如:
"externally_connectable": {
"matches": ["*://localhost/*", "*://your.domain.com/*"]
},
2021 年更新:
chrome.runtime.sendMessage 如果未安装扩展程序或已禁用扩展程序,将在控制台中抛出以下异常。
未经检查的 runtime.lastError:无法建立连接。接收端不存在
要解决此问题,请在 sendMessage 回调中添加此验证
if (chrome.runtime.lastError) {
// handle error
}