Firefox错误:拒绝获取Window.Document的权限

时间:2009-06-23 22:31:40

标签: javascript firefox

我有一个标准的3帧布局;左侧是“fnav”,顶部是“fheader”,标题下方是“fcontent”。所有文件都位于硬盘驱动器本地。

这是抛出错误的JS函数:

function writeHeaderFrame() {
    try {
        var headerFrame = window.top.frames['fheader'];
        var headerTable = document.getElementById('headerTable');
        if (headerFrame && headerTable) {
            headerFrame.document.body.style.backgroundColor = "Black";
            var headerFrameBody = headerFrame.document.documentElement.childNodes[1];
            headerFrameBody.innerHTML = headerTable.innerHTML;
        } else if (headerTable) {
            // there is a headerTable, but no headerFrame
            headerTable.style.display = 'inline' // show the headerTable
        }
      } catch (e) { alert('from header.js, writeHeaderFrame():  ' + e.message); }
}

单击fnav中的链接(或者最初加载框架集)将内容加载到fcontent中,然后fcontent中的JS文件加载“标题”框架......或者无论如何都应该加载。 Javascript最初运行正常,但只要点击链接,我就会收到以下错误:

Permission Denied To Get Window.document

我无法确定原因。任何和所有建议将不胜感激。

5 个答案:

答案 0 :(得分:3)

首先,请点击这些链接时发布的代码及其html。

其次,你有错字吗? Window.document应该是window.document,应该吗? (小写w)

编辑对OP问题中的更改的回复

没有html它有点难以说,但如果我在黑暗中采取刺,我会说这句话:

headerFrame.document.body.style.backgroundColor = "Black";

导致错误。看起来headerFrame位于不同的域上,出于安全原因,您没有权限修改该帧的内容。当然,以下一些行也会有同样的问题。

对于类似案例,另请参阅http://userscripts.org/topics/25029http://www.webdeveloper.com/forum/showthread.php?t=189515

修改2

来自Mozilla开发中心

  

注意:Firefox 3会更改Windows文档的安全性,以便只有它所在的域可以访问该文档。虽然这可能会打破一些现有网站,但这是Firefox 3和Internet Explorer 7的举措,并且可以提高安全性。

(见https://developer.mozilla.org/En/DOM/Window.document

答案 1 :(得分:2)

我猜你试图从不同的原点操纵窗口或文档。 HTML5(以及所有现代浏览器,甚至是IE:D)强制执行(或尝试强制执行)所谓的“同源策略”。基本上,来自一个来源的JS不能与来自不同来源的文档或窗口的DOM交互。

什么是起源?在基本级别,您可以将域替换为原点并且几乎是正确的,但是完整的规则集是

在所有可能性中,firefox仅仅收紧了一个他们过去没有应用相同原始政策的领域。

答案 2 :(得分:1)

显然,有问题的用户更新了他的安装,而没有将以下设置更改为“false”,这允许本地文档可以访问所有其他本地文档。

pref("security.fileuri.strict_origin_policy", true);

这解释了为什么我无法在我的机器上复制错误。

非常感谢大家的帮助。

答案 3 :(得分:0)

您是否尝试过安装Firebug并确定哪条线引发了错误?我猜测,因为这个问题被标记为Firefox,你会看到它出现在它里面。

如果您可以使用此Javascript发布模板HTML页面,那将是最有帮助的。

答案 4 :(得分:0)

脚本/框架页面是否都在同一个域中?如果没有,这是预期的。如果window.document不在同一个域中,则无法从另一个窗口访问它。