我想在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指令。

08-19 15:04