javascript - 如何检查我的网站的 Firefox 扩展是否安装于 2015 年

标签 javascript firefox firefox-addon

我尝试过很多较旧的问题和答案。我显然错过了它。

我有一个(无需重新启动?)带有启动功能的 FF 扩展:

var domains = [ "awesomesite.awesome" ];

var addon_domains = []; // list of domains the addon added
var PREF = "media.getusermedia.screensharing.allowed_domains";

function startup(data, reason) {
    if (reason === APP_STARTUP) {
        return;
    }
    var prefs = Components.classes["@mozilla.org/preferences-service;1"]
            .getService(Components.interfaces.nsIPrefBranch);
    var values = prefs.getCharPref(PREF).split(',');
    domains.forEach(function (domain) {
        if (values.indexOf(domain) === -1) {
            values.push(domain);
            addon_domains.push(domain);
        }
    });
    prefs.setCharPref(PREF, values.join(','));


   // Communicate extension has started when user browses to webpage via window object?
   // ?!?!?!?!
}

您可以看到full code here .

这只需要在过去一年左右的时间内适用于 Firefox。

有什么建议吗? These没有工作。

谢谢!

更新

这是我最终使用的扩展代码:

function startup(data, reason) {
    if (reason === APP_STARTUP) {
        return;
    }
    var prefs = Components.classes["@mozilla.org/preferences-service;1"]
            .getService(Components.interfaces.nsIPrefBranch);
    var values = prefs.getCharPref(PREF).split(',');
    domains.forEach(function (domain) {
        if (values.indexOf(domain) === -1) {
            values.push(domain);
            addon_domains.push(domain);
        }
    });
    prefs.setCharPref(PREF, values.join(','));

    // Set the cookies
    var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
    var cookieSvc = Components.classes["@mozilla.org/cookieService;1"].getService(Components.interfaces.nsICookieService);

    domains.forEach(function (domain) {
      var cookieUri = ios.newURI("http://" + domain + "/", null, null);
      cookieSvc.setCookieString(cookieUri, null, "firefoxScreenSharing=ready;", null);
    });
}

在网页上:

Helpers.pluginFirefox = function() {
  if (!bowser || bowser.name !== 'Firefox') return false;
  // Read the cookie
  return (document.cookie.indexOf('firefoxScreenSharing=ready') !== -1);
};

如果您只有一个域,则 domains.foreach() 是多余的。

最佳答案

您在网站方面无法做太多事情。我建议的是,从您的插件中创建一个 cookie,其中域/主机是您的网站。然后从您的网站检查该 cookie 是否存在。如果存在,则已安装。 :)

当然,在卸载/禁用您的插件时,您应该删除该 cookie。

关于javascript - 如何检查我的网站的 Firefox 扩展是否安装于 2015 年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33793394/

相关文章:

javascript - 计算所选文本的宽度和高度(javascript)

javascript - 在 angularjs 中实现单个三态复选框的最佳方法是什么?

html - Chrome @font-face 问题

php - Firefox 12 重定向后不重新加载页面

javascript - 使用 saveURI() 下载不完整

google-chrome-extension - 渐进式网络应用程序(PWA)与电子与浏览器扩展

javascript - Selenium C# 如何通过 JavaScript 查找元素?

javascript - 数据 URI 在 Firefox 上不显示

javascript - jQuery:在使用 .on() 和 .click() 加载 DOM 后单击 Chrome

javascript - 为什么 JavaScript 在 FireFox 附加组件中比在 FireFox 加载的网页中慢?