0

我正在构建一个 GreaseMonkey 测试脚本,每次访问特定站点时都会生成一个GM_xmlhttpRequest 。GM_xmlhttpRequest 应该只在找到的第一个“文档”(父窗口)上触发,它应该忽略 iframe 和其他子窗口(我不想要 iframe 的 url)。

一些想法和可能的解决方案:

1)我试图在 GM_xmlhttpRequest onload-callback 中插入一个中断。结果:脚本没有响应。FireBug 中没有错误消息。(我猜 break 只在循环中有效。)

onload: function(response) {
    if (response.status == 200) break;
}

2) 在 GM_xmlhttpRequest 之前/之后插入一个 addEventListener: 结果:脚本没有响应。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);
    }
});
4

1 回答 1

0

这称为帧破坏脚本

if (window === parent) {
  // Trigger!
}
于 2010-01-21T19:53:27.757 回答