Преобразование закладки Javascript для использования с greasemonkey? - PullRequest
0 голосов
/ 25 июля 2011

Я пытаюсь заставить следующую закладку действовать как скрипт 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 ]

2 голосов
/ 25 июля 2011
  1. Сценарий greasemonkey не будет иметь прямого доступа к jQuery. Greasemonkey помещает скрипт в собственную область видимости, поэтому все, что вам нужно для доступа в глобальной области страницы (например, jQuery), должно быть доступно через window.wrappedJSObject
  2. Вам нужно заменить все %20 в вашей версии Greasemonkey на пробел
  3. Вам нужно поместить манипуляцию DOM jQuery в функцию ready, чтобы она не запускалась до тех пор, пока элементы не появятся на экране.

Код:

// ==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 голос
/ 26 июля 2011
  1. Поскольку скрипт Greasemonkey не декодирует URL-адрес своего источника, вам необходимо заменить все %20 на пробел .

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


1. Примечание: Оба эти методаи, особенно, ответ Дж.А.Олда, несут небольшой риск того, что веб-страница может заставить вашу систему .



альтернативный метод , (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");
...