5

当我使用jQuery 打印预览插件单击“打印”时,会弹出以下错误和 Firebug:

Error: Permission denied to access property 'name'

     if (window.frames[i].name == "print-frame") { 

我不确定它的确切含义或如何纠正它。

4

2 回答 2

3

有一种方法可以解决这个问题,并且可以在所有主流浏览器上正常工作。Derick 在jQuery Print Preview 的 Github 页面上找到了这个解决方案

这是解决方案,在第 44 行附近,您将看到以下代码:

// The frame lives
        for (var i=0; i < window.frames.length; i++) {
            if (window.frames[i].name == "print-frame") {
                var print_frame_ref = window.frames[i].document;
                break;
            }
        }

将上面的代码替换为:

print_frame_ref = print_frame[0].contentWindow.document;

问题解决了。

于 2012-07-25T01:40:57.703 回答
2

这是 Chrome 中的错误,我希望这清楚吗?

.html 域、协议和端口必须匹配。

您的页面位于 ww.ubhape2.com 上,您正在访问 s7.addthis.com 上的框架


要解决此问题,请更改此行

<script type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4dfb00d56c76d2a5"></script>

指向您网站上的复制脚本。

您还必须编辑该脚本以仅访问您自己的站点。

这是 XSS 或跨站点脚本的示例。


然后我的问题变成了我可以编辑 jQuery 打印预览脚本以防止发生冲突吗?

不。

错误的关键在于 javascript 在另一方的上下文中运行,您无法将代码“注入”到其中。

这是由浏览器强制执行的。

如果不强制执行,那么互联网上的每个用户都会让他们的机器受到损害。

阅读谷歌搜索 XSS 以了解更多信息

然而,

如果您在服务器上托管 javascript(以及 iframe),那么问题就会消失。这是您的代码(和您的 iframe),您可以随意使用。

于 2012-07-08T15:53:59.740 回答