2009-12-08 2 views
-1

Задача моего пользователя довольно проста - прослушивать XHR-запросы с помощью функции XHR-моста, манипулировать полученными данными и возвращать их обратно. Все происходит прозрачно, конечно.Неисправность перехвата запросов AJAX (XHR) из сценария GreaseMonkey

Я наткнулся на этот ответ How can I intercept XMLHttpRequests from a Greasemonkey script? на SO - который обеспечивает следующий код-фрагмент:

(function(open) { 
    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { 
     this.addEventListener("readystatechange", function() { 
      console.log(this.readyState); 
     }, false); 
     open.call(this, method, url, async, user, pass); 
    }; 
})(XMLHttpRequest.prototype.open); 

код работает, как ожидалось при нажатии через FireBug. Однако он ничего не делает в сценарии Greasemonkey.

В дальнейших поисках, я наткнулся на другой ответ: how intercept xhr with greasemonkey - в которой говорится, что:

Greasmonkey и Firefox 3.x в настоящее время не поддерживает «прототип» -свойство. Пожалуйста, смотрите следующий билет для получения дополнительной информации: http://greasemonkey.devjavu.com/ticket/164

У меня есть два основных запросов:

  1. Распространяется ли это Fx v3.5.x также? (Примечание: билет на devjavu.com недоступен)
  2. Что означает подпись (function(){})() в Javascript. (Просьба нести, я не эксперт в продвинутых JS).
+0

В дополнение к ответу Tomasz (в к Q # 2), вот указатель для других: http://www.hunlock.com/blogs/Functional_Javascript#quickIDX5 – Jumper

ответ

0

функция() {} является анонимная функция (лямбда), добавив () после просто выполняет его на лету.
Это очень удобно для хранения различных (уникальных) возможностей для куска кода.

(function(){ 
    var localVariable = 'temp'; 
})(); 
console.log(localVariable); // outputs undefined 
+0

Строго говоря * лямбда * означает использование функции, аргумент в вызове другой функции, но +1 в любом случае :-) –

+0

Tomasz, Спасибо за разъяснение. Любая подсказка по первому вопросу? – Jumper