我无法在本地存储的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:拒绝访问跨域对象上的属性“ parentvar”的权限”
答案 0 :(得分:0)
浏览器具有用于打开/关闭跨域策略的设置。您可以尝试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>