2011-07-25 3 views
0

Я пытаюсь получить следующую закладку, чтобы действовать как сценарий Greasemonkey, чтобы обойти ошибку доступности с сайтами stackexchange.Преобразование закладки javascript для использования с greasemonkey?

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'}), мое предупреждение попадет.

+0

первый догадаться ...% 20s ... Никс их и повторите попытку. EDIT: и, заменив их пробелами, заменим их. Закладки могут иметь пробелы и возврат каретки. –

ответ

2
  1. Сценарий greasemonkey не будет иметь прямого доступа к jQuery. Greasemonkey песочницы сценарий в своей собственной области, так что Вам необходимо получить доступ к глобальной области видимости страницы (как JQuery) должен быть доступен через window.wrappedJSObject
  2. Вы должны заменить все %20 в вашем Greasemonkey версии с космическим полукокса
  3. You необходимо поместить 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 с пространства характера.

  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. Примечание: И этот метод, и особенно ответ 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"); 
Смежные вопросы