2011-07-25 13 views
0

スタックエクスチェンジサイトでアクセシビリティのバグを回避するためにGreasemonkeyスクリプトとして動作するように、次のブックマークを取得しようとしています。greasemonkeyで使用するjavascriptのブックマークを変換していますか?

javascript:(function(){$('a,%20.vote-up-off,%20.vote-down-off,%20.star-off').attr({role:'link',tabindex:'0'});})() 

私は関数()を削除し、次のGreasemonkeyスクリプトに入れても機能しません。

// ==UserScript== 
// @name   StackExchange access 
// @description Enables y-aria stuff on stackoverflow 
// @include * 
// ==/UserScript== 
$('a,%20.vote-up-off,%20.vote-down-off,%20.star-off').attr({role:'link',tabindex:'0'}); 
alert("worldzz"); 

私はグリースモンキーから何とかドキュメントオブジェクトにアクセスする必要があるが、これを行う方法を確認していないことを推測しています。

$('a,%20.vote-up-off,%20.vote-down-off,%20.star-off').attr({role:'link',tabindex:'0'})行をコメントアウトすると、アラートが表示されるため、スクリプトが呼び出されていることが分かります。

+0

最初の推測...%の20代をそれらをニックス、再試行してください:

はそうのようなことを行います。編集:とnixによって私はそれらをスペースで置き換えることを意味します。ブックマークレットにはスペースと改行を入れることができます。 –

答えて

2
  1. greasemonkeyスクリプトはjQueryに直接アクセスできません。 Greasemonkeyのサンドボックス独自のスコープあなたは(jQueryのような)ページのグローバルスコープにアクセスする必要があるので、何でもへのスクリプトは、あなたがスペース文字
  2. あなたとあなたのGreasemonkeyのバージョンでは、すべての%20を交換する必要がwindow.wrappedJSObject
  3. を介してアクセスする必要がありますjQuery DOM操作を準備関数に入れて、要素が画面上に表示されるまで実行しないようにする必要があります。

コード:

// ==UserScript== 
// @name   StackExchange access 
// @description Enables y-aria stuff on stackoverflow 
// @include * 
// ==/UserScript== 
(function(global) 
{ 
    var $; 

    if(global.jQuery) 
    { 
     $ = global.jQuery; 

     $(function() 
     { 
      $('a, .vote-up-off, .vote-down-off, .star-off') 
       .attr({ 
        role:'link', 
        tabindex:'0' 
       }); 
     }); 
    } 
}(window.wrappedJSObject)); 
+0

ありがとう、魅力のように動作します。私はそれがjqueryにアクセスしていることを認識していませんでした。 – Jared

+0

私はそれを '$'と構文の使用に基づいて想定しました。 – JAAulde

1
  1. Greasemonkeyのスクリプトは、URLは、そのソースをデコードしないので、あなたはスペース文字ですべて%20を交換する必要があります。

    // ==UserScript== 
    // @name   StackExchange access 
    // @description Enables y-aria stuff on stackoverflow 
    // @include * 
    // ==/UserScript== 
    unsafeWindow.$ ('a, .vote-up-off, .vote-down-off, .star-off').attr({role:'link', tabindex:'0'}); 
    alert("worldzz"); 
    


1. 注:この方法、特にJAAuldeの答えの両方、ページだけでも使用し、それを持っている場合、ページのjQueryのにアクセスするための

  • その後、持ち運びはslight risk that the web page can pwn your systemです。



    代替方法、(1)セキュリティリスクのない、とjQueryを使用していないページ(2)作品という。 GMスクリプトがそれ自身のjQueryを使用することです。 ...

    // ==UserScript== 
    // @name   StackExchange access 
    // @description  Enables y-aria stuff on stackoverflow 
    // @include * 
    // @require   http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js 
    // ==/UserScript== 
    $ ('a, .vote-up-off, .vote-down-off, .star-off').attr({role:'link', tabindex:'0'}); 
    alert("worldzz"); 
    
  • 関連する問題