0

Я создаю сценарий теста 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); 
    } 
}); 

ответ

0

Это называется frame buster script:

if (window === parent) { 
    // Trigger! 
} 
+0

Работает отлично! Благодаря.. :-) –