【问题标题】:Error - Permission denied - jQuery Print Preview?错误 - 权限被拒绝 - jQuery 打印预览?
【发布时间】:2024-01-21 17:28:02
【问题描述】:

当我使用jQuery Print Preview Plugin 单击“打印”时,会弹出以下错误和 Firebug:

Error: Permission denied to access property 'name'

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

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

【问题讨论】:

    标签: javascript jquery printing print-preview


    【解决方案1】:

    有一种方法可以解决这个问题,并且可以在所有主流浏览器上正常工作。 This solution 被 Derick 在 Github page for jQuery Print Preview 上找到。

    这是解决方案,在第 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://www.ubhape2.com/test-print.html 的框架访问 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%2F*.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 的框架。域、协议和端口必须匹配。

      您的页面位于 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在另一方的上下文中运行,您无法将代码“注入”到其中。

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

      如果不强制执行,那么互联网上的每个用户的机器都会受到攻击。

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

      但是,

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

      【讨论】:

      • 这确实让它更清楚了。我仍然不确定如何解决这个问题。我想显示我的页面的预览。不是 AddThis。如何防止它访问 AddThis Frame?
      • 感谢您提供的信息,这基本上意味着除了托管脚本本身之外,我还必须托管所有 CSS 文件等。无论脚本指向外部什么,我都必须托管。对吗?
      • 我的最后一个问题是不是托管 AddThis 脚本/文件,有没有办法可以编辑打印预览 JS 来解决冲突?
      • q1,您可能可以不托管 CSS 和图像文件。 q2,不,错误的重点是javascript在另一方的上下文中运行,您不能将代码“注入”到其中。这是由浏览器强制执行的。如果不强制执行,那么互联网上的每个用户都会让他们的机器受到损害。阅读 XSS 以了解更多信息。
      • 知道了,感谢您的帮助。我试图在我的网站上托管 JS,但它仍然抛出同样的错误。让我感到困惑的一件事是我们一直在谈论 iframe。在 AddThis 生成它将生成的内容后,我没有在代码中看到 iframe。 iframe 在哪里发挥作用?