Я создаю сценарий теста GreaseMonkey, который делает GM_xmlhttpRequest каждый раз, когда посещается определенный сайт. GM_xmlhttpRequest должен запускаться только по первому найденному «документу» (родительскому окну), и он должен игнорировать iframes и другие дочерние окна (мне не нужен url для iframes).GM_xmlhttpRequest - триггеры на родительских и iframe-окнах - должен запускаться только в родительском окне
Некоторые мысли и возможные пути их решения:
1) Я пытался вставить разрыв в GM_xmlhttpRequest OnLoad обратного вызова. Результат: сценарий не отвечает. В 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-части, либо после скрипта (например 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);
}
});
Работает отлично! Благодаря.. :-) –