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



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

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

现在这显然不是"跨源对象"。我认为这是火狐中的一个错误。它毁了我编写的一个应用程序,我们在许多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中,我收到"安全错误:访问跨源对象上的属性"parentvar"的权限被拒绝">

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

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

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

父.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

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

最新更新