我可以检测网页是否存在扩展名吗?

时间:2016-01-08 10:44:46

标签: javascript google-chrome-extension

我创建了一个扩展程序,我正在尝试检测此扩展程序是否存在于我的某个虚拟主机中。

以下是检测扩展程序是否存在的代码:(script.js

var detect = function(base, if_installed, if_not_installed) {
    var s = document.createElement('script');
    s.onerror = if_not_installed;
    s.onload = if_installed;
    document.body.appendChild(s);
    s.src = base + '/manifest.json';
};
detect('chrome-extension://' + "myExtensionId", function() {alert('boom!');},
    function() {alert("buf. nothin")});

当我在浏览器中打开虚拟主机时,它会提醒我: buf。 nothin 并在控制台日志中出现此错误:

  • 拒绝加载chrome-extension://myExtensionId/manifest.json。资源必须列在web_accessible_resources清单密钥中,以便由扩展名以外的页面加载

如果我点击我创建的扩展程序,它会提醒热播并且我没有收到任何错误,这意味着在扩展程序中它会检测到我的扩展程序,但在我的虚拟主机中却没有。

因此,检测扩展中是否存在扩展名是可能的,可以检测网页是否存在扩展名吗?

1 个答案:

答案 0 :(得分:3)

如果您拥有该页面,则可以向该扩展程序发送消息。如果它响应,则安装它。文档:https://developer.chrome.com/extensions/messaging#external-webpage

的manifest.json

"externally_connectable": {
  "matches": ["https://example.com/*"]
}

page.js

var id = "randomlettersfromwebstoreurl"

chrome.runtime.sendMessage(id, "installed?", function(response) {
 if(response) {
  // The extension is installed
 } else {
  // The extension is not installed or disabled
} })

extension.js

chrome.runtime.onMessageExternal.addListener(function(request, sender, respond) {
 if(request == "installed?") {
  respond(true)
} })