Я создаю тестовый скрипт GreaseMonkey, который делает GM_xmlhttpRequest каждый раз, когда посещается определенный сайт. GM_xmlhttpRequest должен срабатывать только на первом найденном «документе» (родительском окне) и игнорировать iframes и другие дочерние окна (я не хочу URL для iframes).
Некоторые мысли и возможные решения:
1) Я попытался вставить разрыв в обратный вызов загрузки GM_xmlhttpRequest. Результат: скрипт не отвечает. Нет сообщения об ошибке в FireBug. (Я думаю, что разрыв работает только в циклах.)
onload: function(response) {
if (response.status == 200) break;
}
2) Вставьте addEventListener до / после GM_xmlhttpRequest:
Результат: скрипт не отвечает. Нет сообщения об ошибке в FireBug.
document.addEventListener("load",
// (Insert the GM_xmlhttpRequest code here - see below)
,false);
3) Идея: можно ли отменить запрос GM_xmlhttpRequest после первого успешного запроса? Либо в onload-part, либо после скрипта (например, document.removeEventListener отменяет document.addEventListener).
4) Идея: может ли GreaseMonkey идентифицировать родительское окно? так что скрипт запускается только в родительском окне?
Кроме того, я бы предпочел не делать сценарий синхронным вызовом, поскольку он замедлит работу.
// ==UserScript==
// @name GreaseMonkey xmlhttpRequest test
// @include http://www.jp.dk/*
// ==/UserScript==
GM_xmlhttpRequest({
method: "POST",
url: "http://localhost/do_stuff",
data: "url=" + document.location.href,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
onload: function(response) {
if (response.responseText)
alert("GreaseMonkey said: " + response.responseText);
}
});