我尝试过一堆较旧的问题和答案。我显然很想念它。
我有一个带有启动功能的(无重启?)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()
是多余的。
答案 0 :(得分:1)
你不能从你的网站那里做很多事情。我建议您从您的插件创建一个cookie,域/主机是您的网站。然后从您的网站检查该cookie是否存在。如果它存在,那么它的安装。 :)
当然,在卸载/禁用你的插件时,你应该删除该cookie。