GM_xmlhttpRequest - срабатывает в окнах Parent и Iframe - должен срабатывать только в окне Parent - PullRequest
0 голосов
/ 20 января 2010

Я создаю тестовый скрипт 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);
    }
});

1 Ответ

0 голосов
/ 21 января 2010

Это называется скрипт разгона кадра :

if (window === parent) {
  // Trigger!
}
...