【发布时间】:2011-10-12 05:38:06
【问题描述】:
根据this页面我应该可以调用子窗口的参数和函数,但它不适合我。
var w = window.open("index.html");
console.log(w);
console.log(w.foo);
console.log(w) 表明有一个名为foo 的函数,但console.log(w.foo) 输出undefined。这是一个安全问题吗?
编辑这里还有一些功能:
child.html(省略正文):
<head>
<script type="text/javascript">
test = 123 ;
function foo(arg){
//do something
}
</script>
</head>
父.html:
var w = window.open("child.html");
console.log(w);
//outputs all the methods and parameters
console.log(w.foo);
//outputs 'undefined'
console.log(w.test);
//outputs 'undefined'
编辑 2 另外我应该解释为什么我需要传递参数,因为有人会不可避免地问我为什么不能“硬编码”。我有一个 HTML 画布元素,每次用户右键单击时,都会出现一个右键菜单,其中包含“下面的列表形状”选项。
当用户单击此菜单项时,我想传递单击下方所有形状的列表并将其显示在新窗口中。以下是我面临的问题:
-
我无法将它作为参数传递 b/c 我不知道窗口是否已加载(我似乎也无法更改
李>onload函数) 我不能让子窗口查询父窗口b/c右键菜单点击后消失。
【问题讨论】:
-
你的意思是一个 jsfiddle 示例还是一个独立的脚本?
-
我不知道如何在 jsfiddle 上实现一个示例
-
我相信他们有一个使用常见问题解答。无论哪种方式,我们都无法知道您的代码是什么样子。
-
我更新了一些信息
-
如果父窗口和子窗口都包含来自同一域的页面,则不应该存在安全问题。在您尝试访问其功能时,子页面 (index.html) 是否已完成加载?我通常发现最简单的方法是从父母那里获得它需要的子页面请求值,例如
x = window.opener.parentFunction();,或者告诉父母它已经准备好(在孩子的 onload 结束时:)window.opener.childLoaded();并让父母等待在尝试操纵孩子之前调用该函数。
标签: javascript function scope window