我正在尝试从子窗口调用父级中定义的javascript函数。我有两个这样的文件:
父:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function foo () {
alert ("Hello from parent!");
}
function doStuff () {
var w = window.open("testa.html");
}
</script>
</head>
<body>
<input type="button" value="open" onClick="doStuff();" />
</body>
</html>
孩子:
<html>
<head>
<title>Test A</title>
<script type="text/javascript">
function get() {
window.opener.foo();
}
</script>
</head>
<body>
<input type="button" value="Call Parent" onClick="get();" />
</body>
</html>
对于我的生活,我不能从子进程中调用函数foo。我认为这应该可以使用window.opener对象,但我似乎无法使这个工作。有什么建议吗?
答案 0 :(得分:16)
确保您通过http://访问此内容,以便通过相同的原始策略,您可以访问子项的开启者。如果您只是使用file://,它将无法工作。
答案 1 :(得分:1)
回答Rahul的问题:
每个浏览器都可以从服务器或本地文件系统加载页面。要从本地文件系统加载文件,您应该在浏览器中输入这样的地址file://[path]
,其中[path]是文件系统中文件的绝对路径(包括Windows上的驱动器号,有关详细信息,请参阅http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx )。
要从本地HTTP服务器加载文件(如果有的话),你应该设置这样的http://localhost:[port]/[path]
,其中[port]是服务器运行的端口(默认为80)和[path] ]是文件相对于服务器文档根文件夹的路径。文档根文件夹取决于服务器配置。
因此,如您所见,可以通过两种方式将相同的本地文件加载到浏览器中。然而,这两种方式之间存在很大差异。在第一种情况下,浏览器不使用HTTP协议来加载文件,因此缺少许多不同机制正常工作所必需的东西。例如,AJAX不能使用本地文件,因为HTTP响应状态不是200,等等。
在这个特定的例子中,浏览器安全机制没有获取原始信息,并且无法访问父窗口。