检查用户是否安装了 Chrome 扩展程序
2022-08-30 04:49:47
我正在构建一个Chrome扩展程序,为了让整个事情按照我想要的方式工作,我需要一个外部JavaScript脚本来检测用户是否安装了我的扩展程序。
例如:用户安装我的插件,然后转到带有我的脚本的网站。该网站检测到我的扩展已安装,并相应地更新页面。
这可能吗?
我正在构建一个Chrome扩展程序,为了让整个事情按照我想要的方式工作,我需要一个外部JavaScript脚本来检测用户是否安装了我的扩展程序。
例如:用户安装我的插件,然后转到带有我的脚本的网站。该网站检测到我的扩展已安装,并相应地更新页面。
这可能吗?
Chrome 现在可以将消息从网站发送到扩展程序。
因此,在扩展后台.js(内容.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
未选中的运行时.last错误: 无法建立连接。接收端不存在
若要解决此问题,请在回调中添加此验证sendMessage
if (chrome.runtime.lastError) {
// handle error
}
我相信有一种直接的方法(直接调用扩展上的函数,或者通过使用JS类进行扩展),但是一种间接方法(直到出现更好的东西):
让您的 Chrome 扩展程序在网页上查找具有非常具体的 ID 的特定 DIV 或其他元素。
例如:
<div id="ExtensionCheck_JamesEggersAwesomeExtension"></div>
执行 a 并将 设置为扩展的版本号或其他名称。然后,您可以读取该客户端的内容。getElementById
innerHTML
同样,如果有可用的直接方法,则应使用直接方法。
编辑:直接方法找到!!
使用此处找到的连接方法:https://developer.chrome.com/extensions/extension#global-events
未经测试,但你应该能够做到...
var myPort=chrome.extension.connect('yourextensionid_qwerqweroijwefoijwef', some_object_to_send_on_connect);