Firefox 在本地存储的HTML框架集中读取JS变量

Firefox 在本地存储的HTML框架集中读取JS变量,firefox,same-origin-policy,frameset,Firefox,Same Origin Policy,Frameset,我无法在本地存储的HTML框架集中跨框架读取JS变量 即使在本地存储的框架集中声明变量(例如,在定义框架集=父级的htm页面中),也会触发“同源”策略。尝试从帧访问此变量时,出现“跨原点对象的权限被拒绝”错误。Firefox就是这样,而InternetExplorer对此没有异议 现在,这显然不是一个“跨原点对象”。我认为这是Firefox中的一个bug。它毁了我编写的一个应用程序,我们在许多CDR上向客户分发了该应用程序。应用程序依赖于跨本地框架集读取这些Javascript变量。我想知道是否

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

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

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

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

以下是我的在线示例文件: 但正如我所说,它在在线版本中起作用

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

var parentvar='hello';
在“框架1”框架中:

var frame1var=parent.parentvar;警报(frame1var);
将框架集作为本地文件加载会导致Firefox中出现错误


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

浏览器具有打开/关闭跨源策略的设置。您可以尝试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>
<html>
<head></head>
<body style="background-color:red;">

<script>
var frame1var=parent.getParentVal();document.write(frame1var);
</script>

</body>
</html>

var parentvar='hello';
函数getParentVal(){return parentvar;}
child.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>
<html>
<head></head>
<body style="background-color:red;">

<script>
var frame1var=parent.getParentVal();document.write(frame1var);
</script>

</body>
</html>

var frame1var=parent.getParentVal();document.write(frame1var);

我的程序通过CD分发给许多人,因此选项1和2不可能。我希望选项3能起作用,但不幸的是,Firefox说“SecurityError:访问跨源对象的属性“getParentVal”的权限被拒绝”(指向子帧)