Firefox、Opera、Safari、ChromeはUserJSをサポートしています。 すべてが異なります。 これらのブラウザー用のスクリプトの作成方法に関する一連の記事を書く予定です。 一日一回。
本日、YandexロゴをGoogleに変更します。 このような役に立たないスクリプト。
yandex-with-google-logo.user.js :
// == UserScript ==
// yandex.ruの@name Googleロゴ
// @include http://www.yandex.ru/*
// == / UserScript ==
var logo = document.querySelector( "img [src $ = 'logo.png']");
if(ロゴ){
logo.src = 'http://www.google.com/intl/en_ALL/images/logo.gif';
logo.removeAttribute( 'height');
}
このUserJSは、Firefox、Opera、Safari、Chromeの最新バージョンで動作します。 しかし、Operaにはニュアンスがあります:ロゴ変数はWebページから利用可能になりました。
ロゴ変数が既にページで定義されている場合、スクリプトはそれを上書きします。 これは、コードを匿名関数でラップすることで回避できます。
yandex-with-google-logo2.user.js :
// ==ユーザースクリプト==
// yandex.ruの@name Googleロゴ
// @include http://www.yandex.ru/*
// == / Userscript ==
(関数(){
var logo = document.querySelector( "img [src $ = 'logo.png']");
if(ロゴ){
logo.src = 'http://www.google.com/intl/en_ALL/images/logo.gif';
logo.removeAttribute( 'height');
}
})();
なぜOperaだけで変数がグローバルになったのですか? Operaでは、UserJSのウィンドウ==ページウィンドウ。
Greasemonkeyでは、windowは
XPCNativeWrapperです。 このオブジェクトは、Webページのウィンドウの外にあり、Webページのスクリプトにアクセスできないかのようです。 Webページウィンドウへのアクセスは、window.wrappedJSObject(別名
unsafeWindow )を介して行われます。

Safari Greasekitでは、window UserJS == window pages、およびOperaで。 ただし、スクリプトはすでに匿名関数でラップされているかのように、変数はローカルのままです。
続き:
例2:アラート()を再定義します