【问题标题】:Reading JS variables in a locally stored HTML frameset在本地存储的 HTML 框架集中读取 JS 变量
【发布时间】:2019-11-25 11:11:32
【问题描述】:

我无法在本地存储的 HTML 框架集中跨框架读取 JS 变量

即使在本地存储的框架集中(例如,在定义框架集 =“父”的 htm 页面中)声明变量时,“同源”策略也会触发。尝试从框架访问此变量时,出现“跨域对象的权限被拒绝”错误。 Firefox 会发生这种情况,而 Internet Explorer 没有异议。

现在这显然不是“跨域对象”。我认为这是 Firefox 中的一个错误。它破坏了我编写的一个应用程序,我们在许多 CDR 上分发给客户。该应用程序依赖于跨本地框架集读取这些 Javascript 变量。我想知道是否有办法让它再次工作。非常感谢您的帮助。

示例:不幸的是,这仅适用于本地存储的文件,因此我无法演示。您必须将这三个文件存储在本地才能看到问题。

这是我的在线示例文件: http://mpeters.de/temp/frameset/sameorigin_frameset.htm 但正如我所说,它适用于在线版本。

“父”文件中发生了什么:

<script>var parentvar='hello';</script>

<frameset>
    <frame name="frame1" src="sameorigin_frame1.htm">
    <frame name="frame2" src="sameorigin_frame2.htm">
</frameset>

在“frame1”帧中:

<script>var frame1var=parent.parentvar;alert(frame1var);</script>

将框架集加载为本地文件会导致 Firefox 出错。

框架应该从父文件中读取并显示变量。在 MSIE 中,确实如此。在 Firefox 中,我收到“SecurityError: Permission denied to access property “parentvar” on cross-origin object”

【问题讨论】:

    标签: firefox same-origin-policy frameset


    【解决方案1】:

    浏览器具有打开/关闭跨域策略的设置。您可以尝试 CORS Anywhere 或 FireFox 的其他附加组件之一,以允许所有跨域流量。

    第二种选择是将您的文件放在 IIS 或 nginx 或 httpd 下,如果您正在这样做,则不要将它们作为本地文件加载。

    第三个是不要尝试获取变量,而是在父级上创建一个名为 getMyVar() 的全局函数,该函数返回变量值并使用 parent.getMyVar() 从框架中调用该函数。这适用于 FireFox:

    parent.html

    <html>
    <head></head>
    
    
    <script>var parentvar='hello';
    function getParentVal() { return parentvar; }
    </script>
    
    <frameset cols="50%,50%">
        <frameset rows="100,300">
            <frame name="frame1" src="child.html">
            <frame name="frame2" src="child.html">
        </frameset>
    </frameset>
    
    
    </html>
    

    child.html

    <html>
    <head></head>
    <body style="background-color:red;">
    
    <script>
    var frame1var=parent.getParentVal();document.write(frame1var);
    </script>
    
    </body>
    </html>
    

    【讨论】:

    • 我的程序通过 CD 分发给许多人,因此选项 1 和 2 是不可能的。我希望选项 3 起作用,但不幸的是,Firefox 说“SecurityError: Permission denied to access property "getParentVal" on cross-origin object”(指向子框架)
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 2015-05-10
    • 2014-11-08
    • 2014-06-04
    • 2013-04-21
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多