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()