转换javascript书签以与greasemonkey一起使用?

时间:2011-07-25 15:43:31

标签: javascript greasemonkey bookmarklet

我正在尝试使用以下书签作为Greasemonkey脚本来解决stackexchange站点的辅助功能错误。

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");

我猜我需要以某种方式从Greasemonkey访问文档对象,但我不知道该怎么做。

我知道脚本被调用了,因为如果我注释掉$('a,%20.vote-up-off,%20.vote-down-off,%20.star-off').attr({role:'link',tabindex:'0'})行,我的警报会被点击。

2 个答案:

答案 0 :(得分:2)

  1. greasemonkey脚本无法直接访问jQuery。 Greasemonkey将脚本沙箱放入其自己的范围内,因此必须通过window.wrappedJSObject
  2. 访问您在页面的全局范围内访问的任何内容(如jQuery)
  3. 您需要使用空格字符
  4. 替换Greasemonkey版本中的所有%20
  5. 您需要将jQuery DOM操作放在ready函数中,以便在元素出现在屏幕上之前它不会运行。
  6. <强>代码:

    // ==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 ) );
    

答案 1 :(得分:1)

  1. 由于Greasemonkey脚本不对其源代码进行URL解码,因此您需要将所有%20替换为 space 字符。

  2. 然后,要访问页面的jQuery,如果页面甚至有它,只需使用:

    // ==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");
    

  3. 1. 注意:此方法,尤其是JAAulde的答案都带有slight risk that the web page can pwn your system



    备用方法,(1)没有安全风险,(2)适用于不使用jQuery的网页;是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");