3

有一个网页我正在为它制作一个 greasmonkey 脚本。此页面有几个 iframe。我发现他们是问题所在,但我不知道如何解决这个问题。

起初,我的脚本创建了一个带有按钮的小 div 框。通过按下按钮脚本分析网页内容并alert在某些条件下调用。

Firefox 中的 Javascript 控制台已经向我大喊拒绝访问,document因为我的脚本正在document.getElementByID用于查找顶部文档的正文,其中 div 框正在附加到该正文。

这是很容易避免的问题,因为脚本失败并卡在 iframe 中,但它仍然在主页上继续,因为它确实提供了对document.

当我尝试在我的函数中使用警报时,问题就出现了。似乎 iframe 接管了我的脚本并用Permission denied to access property 'alert'.

我如何告诉浏览器/脚本或其他任何东西,我只希望我的脚本在主文档上运行并且我不想被 iframe 打扰?我安装了 NO-script 插件,允许主域并阻止辅助域(即在 iframe 内加载)并且所有警报消息都正常。但是,我不能要求我的用户安装 noscript 启用/禁用特定域,并且我的脚本应该可以正常工作。我需要找到适用于所有启用的 iframe 的解决方案。

希望它没有听起来令人困惑。

感谢您的任何帮助。

4

1 回答 1

5

回覆:

我如何告诉浏览器/脚本或其他任何东西,我只希望我的脚本在主文档上运行并且我不想被 iframe 打扰?我安装了 NO-script 插件,允许主域并阻止辅助域(即在 iframe 内加载)并且所有警报消息都正常。

首先,调整您的包含和排除指令以尽可能忽略 iframe。例如:

// @include  http://example.com/normal/*
// @include  http://example.com/extra/*
// @exclude  http://example.com/extra/in_iframe/*


接下来,将这两行添加为Metadata Block之后的第一行代码:

if (window.top != window.self)  //-- Don't run on frames or iframes
    return;

这将阻止 GM 脚本在 iframe 上运行。

于 2011-04-30T19:36:05.517 回答