我在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
答案 0 :(得分:1)
这与跨站点脚本有关,这可能是一个安全问题。由于Chrome在此方面的行为非常严格,因此无法实现您的目标。
幸运的是,你可以使用一个漂亮的技巧(如果你的变量只是一个字符串):
将第一帧中的链接更改为test.html?foo = bar
在第二帧中读取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,但这也是错误的建议。