错误 - 权限被拒绝 - jQuery 打印预览?

5
当我使用jQuery打印预览插件点击“打印”时,以下错误会在Firebug中弹出:
Error: Permission denied to access property 'name'

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

我不确定它的确切含义或如何纠正它。
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;

问题已解决。

2
这是Chrome浏览器的错误提示,希望这样能更清楚明白?
不安全的JavaScript尝试访问URL为http://s7.addthis.com/static/r07/sh090.html#iit=1341762779832&tmr=load%3D1341762779182%26core%3D1341762779520%26main%3D1341762779826%26ifr%3D1341762779833&cb=0&cdn=0&chr=UTF-8&kw=&ab=-&dh=www.ubhape2.com&dr=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F11384440%2Ferror-permission-denied-jquery-print-preview&du=http%3A%2F%2Fwww.ubhape2.com%2Ftest-print.html&dt=TEST%20Page&md=0&cap=tc%3D0%26ab%3D0&inst=1&irt=0&jsl=33&lng=en-US&ogt=&pc=men&pub=ra-4dfb00d56c76d2a5&ssl=0&sid=4ff9acdb1a41cc60&srd=0&srf=0.02&srp=0.2&srl=1&srx=1&ver=300&xck=0&xtr=0&og=&rev=114791&ct=1&xld=1&xd=1 的框架,来自URL为http://www.ubhape2.com/test-print.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),可以按照您的意愿进行操作。


这确实更清晰了。但我仍然不确定如何解决这个问题。我想为我的页面显示一个预览,而不是AddThis。我该如何防止它访问AddThis框架? - L84
谢谢提供的信息,这基本上意味着除了托管脚本本身外,我还必须托管所有CSS文件等。无论脚本指向外部的内容,我都必须进行托管。正确吗? - L84
我的最后一个问题是,除了托管 AddThis 脚本/文件外,是否有一种方法可以编辑打印预览 JS 以解决冲突? - L84
q1,你可能可以不托管CSS和图像文件。 q2,不,错误的关键在于Javascript正在另一方的上下文中运行,而您无法将自己的代码“注入”其中。这是由浏览器执行的。如果没有执行,则互联网上的每个用户都将使他们的计算机受到威胁。阅读有关XSS的更多信息。 - Hogan
我正在阅读Print Preview插件的GitHub页面,并找到了解决方案。我在这里发布了它。 - L84
显示剩余2条评论

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