我想在Greasemonkey / UserScript的更新可用时通知用户。但是,当用户从Chrome网上应用店安装了脚本后,由于它具有自动更新功能,因此我不想打扰。
我最初考虑过使用$.browser==chrome
,但是Chrome用户也有可能使用Tampermonkey安装了它。 (此外,如果站点将更新jQuery,$.browser
将停止工作)
因此,是否有可能检测到它是通过Chrome网上应用店安装的UserScript?
最佳答案
最好只让用户知道有可用的更新,而不用担心平台。同样不清楚这个脚本是如何跨浏览器的。您可能必须求助于浏览器嗅探(通常不建议这样做),以确保绝对正确。
如果仅关注Chrome和/或Firefox,则可以使用the scriptHandler
property of the GM_info
object:
// ==UserScript==
// @name _Rough script handler detector
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// ==/UserScript==
var scriptEngine;
if (typeof GM_info === "undefined") {
scriptEngine = "plain Chrome (Or Opera, or scriptish, or Safari, or rarer)";
// See https://stackoverflow.com/a/2401861/331508 for optional browser sniffing code.
}
else {
scriptEngine = GM_info.scriptHandler || "Greasemonkey";
}
console.log ('This userscript is running on ' + scriptEngine + '.');
产生:
坦佩猴(Tampermonkey):
该用户脚本正在Tampermonkey上运行。
Greasemonkey(严格来说是Firefox):
该用户脚本在Greasemonkey上运行。
来自网上商店的Chrome,或其他:
该用户脚本在普通的Chrome(或Opera,或脚本,或Safari,或更罕见)上运行。
因为当前只有大型引擎(Greasemonkey和Tampermonkey)支持
GM_info
,所以如果您的用户脚本特别是跨浏览器,则在极少数情况下您需要进行浏览器嗅探以区分。See this answer for browser-sniffing code that doesn't require jQuery.
注意:使用
@grant
不需要GM_info
指令。