如何解决“访问属性'alert'被拒绝”的权限问题?

3
我正在为一个网页制作Greasemonkey脚本。该页面有几个iframe。我已经发现它们是问题所在,但是我不知道如何解决这个问题。
首先,我的脚本创建了一个小的div框,并添加了一个按钮。通过按下按钮,脚本分析网页内容并在特定条件下调用alert。
Firefox中的Javascript控制台已经告诉我,因为我的脚本使用document.getElementByID查找顶层文档的body,而无法访问document,所以拒绝了访问。
这是一个容易避免的问题,因为脚本会在iframes中失败并卡住,但它仍然在主页面上继续,因为它确实可以访问document。
当我尝试在我的函数中使用alert时,问题就出现了。似乎iframes接管了我的脚本,并使用"Permission denied to access property 'alert'"杀死了它。
我应该如何告诉浏览器/脚本或其他东西,我只想让我的脚本在主文档上运行,而不想被iframes打扰呢?我安装了NO-script插件,允许主域并阻止次要域(在iframes中加载)和所有警报消息都正常。但是,我不能要求我的用户安装noscript启用/禁用特定域,而且我的脚本应该正常工作。我需要找到一个适用于所有iframes的解决方案。
希望这不会听起来令人困惑。
感谢您的任何帮助。
1个回答

5

关于:

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

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

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


接下来,在元数据块之后,将以下2行代码作为第一行添加:

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

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

1
谢谢,只需添加两行代码就可以了,一切都很好 :) - user1651105

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接