在chrome中访问不同框架中的javascript变量

在chrome中访问不同框架中的javascript变量,javascript,google-chrome,frames,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> variable=“第1帧值”; te

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

<script> variable="frame 1 value";</script>
<a href="" onclick="javascript:parent.frames[1].location='test.html';">click here</a>
variable=“第1帧值”;
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>

window.onload=函数(){
div=document.getElementById(“fred”);
div.innerHTML=“”+top.frames[0]。变量+”;
}
你好
我在这个网站和其他网站上看过,他们看到一个建议,因为chrome页面在不同的进程中运行,所以它们不能传递值。这是真的吗?如果是的话,有没有办法(饼干?)

谢谢

拉塞尔

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


这与跨站点脚本有关,这可能是一个安全问题。因为Chrome在这方面有非常严格的行为,所以不可能实现您想要的

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

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

  • 阅读第二帧中的window.location.href。这将产生类似“Z:\folder\test.html?foo=bar”的结果。现在,您可以使用字符串操纵函数从href中提取foo(case:bar)的值


  • HTML5存储拯救一切!对于第一帧:

    <script>localStorage.setItem('variable', 'frame 1 value');</script>
    <a href="#" onclick="javascript:parent.frames[1].location='test.html';return false">click here</a>
    
    localStorage.setItem('variable','frame 1 value');
    
    对于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>
    
    
    window.onload=函数(){
    div=document.getElementById(“fred”);
    div.innerHTML=”“+localStorage.getItem('variable')+”;
    }
    你好
    

    注意:IE7和一些旧浏览器不支持本地存储。但是,您应该能够使用
    if(typeof(localStorage)==“undefined”){}
    来检测您需要使用哪种方法。

    帧自1997年(HTML 4.0规范)以来由于许多原因而被弃用,因此最好的建议是不要使用它们


    您也可以使用命令行参数运行Chrome——禁用web安全,但这也是一个错误的建议

    您不能使用cookies来解决此问题。请参阅参考资料,
    javascript:
    不属于
    onclick
    属性。它不是语法错误的唯一原因是
    something:
    定义了一个标签,在您的情况下,这几乎是不可行的。感谢您的两个答案,它们都是一个很大的帮助。我要去文森特家,因为似乎一切都应该支持它。我希望我有更多的分数,这样我就可以给分数:-)