在chrome中访问不同帧中的javascript变量

时间:2011-02-11 22:20:19

标签: javascript google-chrome frames

我在chrome中的帧之间传递javascript值时遇到问题。在其他浏览器(Opera和Firefox)中它可以工作。第一帧包含以下html:

<script> variable="frame 1 value";</script>
<a href="" onclick="javascript:parent.frames[1].location='test.html';">click here</a>

和test.html是:

<html>
<head>
<script>window.onload = function() {
  div = document.getElementById("fred");
  div.innerHTML="<b>" + top.frames[0].variable + "</b>";
  }
</script>
</head>
<body>
  <div id="fred">
hi there</div>
</body>
</html>

我查看了这个网站和其他人,并且已经看到一个建议,因为chrome页面在不同的进程中运行,他们无法传递值。这是真的,如果是这样的话(饼干?)

谢谢,

罗素

(编辑)我刚刚找到另一个答案,说这只发生在文件协议上。就像另一个问题的作者一样,我正在编写一个用于运行cd的应用程序,所以我需要使用文件协议。我使用的Chrome版本是9.0。

RY

3 个答案:

答案 0 :(得分:1)

这与跨站点脚本有关,这可能是一个安全问题。由于Chrome在此方面的行为非常严格,因此无法实现您的目标。

幸运的是,你可以使用一个漂亮的技巧(如果你的变量只是一个字符串):

  1. 将第一帧中的链接更改为test.html?foo = bar

  2. 在第二帧中读取window.location.href。这将产生类似“Z:\ folder \ test.html?foo = bar”的内容。现在你可以使用字符串操作函数从href中提取foo的值(如果:bar)。

答案 1 :(得分:1)

HTML5存储救援!对于第一帧:

<script>localStorage.setItem('variable', 'frame 1 value');</script>
<a href="#" onclick="javascript:parent.frames[1].location='test.html';return false">click here</a>

对于test.html:

<html><head>
    <script>
        window.onload = function() {
            div = document.getElementById("fred");
            div.innerHTML="<b>" + localStorage.getItem('variable') + "</b>";
        }
    </script>
</head><body>
    <div id="fred">hi there</div>
</body></html>

注意事项:IE7和一些旧版浏览器不支持localStorage。但是,您应该能够使用if (typeof(localStorage) == 'undefined') {}来检测需要使用的方法。

答案 2 :(得分:1)

自1997年以来不推荐使用框架(HTML 4.0规范),原因有很多 - 所以最好的建议是不要使用它们。

您还可以使用命令行参数--disable-web-security运行Chrome,但这也是错误的建议。