クロスブラウザーUserJSを作成します。 例1:Yandexロゴの変更

Firefox、Opera、Safari、ChromeはUserJSをサポートしています。 すべてが異なります。 これらのブラウザー用のスクリプトの作成方法に関する一連の記事を書く予定です。 一日一回。



本日、YandexロゴをGoogleに変更します。 このような役に立たないスクリプト。



Googleロゴ付きYandex



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ページから利用可能になりました。



ロゴ// [オブジェクトHTMLImageElement]ロゴ//未定義




ロゴ変数が既にページで定義されている場合、スクリプトはそれを上書きします。 これは、コードを匿名関数でラップすることで回避できます。 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:アラート()を再定義します



All Articles