GM_xmlhttpRequest не работает при вызове из $(document).ready()?

Это мой скрипт GM_xmlhttpRequest:

// ==UserScript==
// @name        test
// @namespace   test
// @include     http://stackru.com/*
// @version     1
// ==/UserScript==

GM_xmlhttpRequest({
  method: "GET",
  url: "http://example.com",
  onload: function(response) {
    alert(response.responseText);
  }
});

function begin(){
    alert("ready");
}

$(document).ready(function() {
    begin();
}); 

Который предупреждает только содержание example.com, а не "готов".

НО, когда я делаю следующее, ничего не происходит - никаких предупреждений нет:

function begin(){
    GM_xmlhttpRequest({
      method: "GET",
      url: "http://example.com",
      onload: function(response) {
        alert(response.responseText);
      }
    });
    alert("ready");
}

$(document).ready(function() {
    begin();
}); 

Что я делаю неправильно?

1 ответ

Решение

Я уверен, что в первом примере показано содержимое, возвращаемое GM_xmlhttpRequest, но не "готово"

jQuery / $ не доступен напрямую в Greasemonkey. Он загружается внутри страницы (в данном случае - stackru.com). Для доступа к функциям / свойствам страницы вы можете использовать unsafeWindow-объект ( http://wiki.greasespot.net/UnsafeWindow):

unsafeWindow.$(document).ready(function() {
    begin();
}); 

Но я бы предложил вызвать begin() напрямую, вам не нужно $.ready() здесь, потому что GM-скрипты всегда будут выполняться при возникновении события DOMContentLoaded, которое равно $.ready()

Другие вопросы по тегам