2014-12-15 5 views
2

Я хочу уведомить пользователя, когда доступно обновление для моего Greasemonkey/UserScript. Однако, когда пользователь установил сценарий из Интернет-магазина Chrome, я не хочу беспокоиться, потому что у него есть функции автоматического обновления.Как определить, установлен ли пользовательский указатель из магазина Chrome?

Сначала я подумал об использовании $.browser==chrome, но также возможно, что пользователь Chrome установил его с помощью Tampermonkey. (Кроме того, если сайт будет обновлять jQuery, $.browser перестанет работать)

Итак, можно ли обнаружить, что это пользовательский интерфейс, установленный через Интернет-магазин Chrome?

ответ

3

Возможно, лучше всего просто сообщить пользователю, что доступно обновление, и не беспокоиться о платформе. Также неясно, как кросс-браузер этот скрипт. Возможно, вам придется прибегать к обнюхиванию браузера (обычно не рекомендуется), чтобы быть абсолютно уверенным.


Вы можете использовать the scriptHandler property of the GM_info object, если вы озабочены только Chrome и/или Firefox:

// ==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:

Это userscript работает на Тампермонке.

Greasemonkey (Строго Firefox):

Это userscript работает на Greasemonkey.

Chrome от интернет-магазина или другого:

Это userscript выполняется на обычной Chrome (Or Opera или Scriptish, или Safari, или реже).

Потому что только большие двигатели (Greasemonkey и Tampermonkey) в настоящее время поддерживают GM_info, если ваш userscript особенно кросс-браузер, вам нужно будет сделать браузер нюхают, чтобы дифференцироваться в более редких случаях.
See this answer for browser-sniffing code that doesn't require jQuery.


Примечание: @grant директива не требуется использовать GM_info.