跨 HTML 窗口的 Javascript 函数调用

标签 javascript function scope window

根据 this page 我应该可以调用子窗口的参数和函数,但它对我不起作用。

var w = window.open("index.html");
console.log(w);
console.log(w.foo);

console.log(w) 显示有一个名为 foo 的函数,但是 console.log(w.foo) 输出 未定义。这是安全问题吗?


编辑这里有一些更多的功能:

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 canvas 元素,每次用户右键单击时,都会出现一个右键单击菜单,其中包含“在下面列出形状”选项。

当用户单击此菜单项时,我想在该单击下传递所有形状的列表,并在新窗口中显示它。以下是我面临的问题:

  1. 我无法将它作为参数传递 b/c 我不知道窗口是否已加载(我似乎也无法更改 onload 函数)

  2. 我无法让子窗口查询父窗口,因为右键单击菜单在单击后消失。

最佳答案

问题是在尝试检查其内容之前,您没有给子窗口的 DOM 加载机会。

console.log(w) 似乎通过立即显示 Window 或类似内容来工作,但实际上,当你的手指开始展开时控制台中的项目详细信息、属性和方法存在。

当我在 Firebug 断点的帮助下注入(inject)延迟时,我可以很好地看到子窗口的属性。

This question谈论为 child 添加 onLoad 事件监听器。使用其接受的答案,如何:

<script type="text/javascript">
// parent.html
var w;

function lol() {
    console.log(w.foo);
    console.log(w.test);
}

w = window.open("child.html");
console.log(w);
w.addEventListener('load', lol, true);
</script>

(我也能够以 1 秒的 setTimeout 延迟取得成功。)

关于跨 HTML 窗口的 Javascript 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6810486/

相关文章:

python - 函数来pickle给定模块中的所有对象

python - 更改列表的元素与更改列表本身

javascript - 单击按钮后如何删除特定的 <li>?

javascript - 我如何找出鼠标在 d3 中的 x 和 y 位置?

php - 如何从地址栏调用 php 函数?

Javascript 在动态调用其他 js 文件中的另一个类时出现问题

javascript - 如何使用 Jquery 仅在图标单击时显示日期选择器?

javascript - 有没有办法通过浏览器Javascript检测Mac上触控板、魔术鼠标或魔术触控板的多点触控事件?

php - 从 MySQL 数据库中的两列之和计算百分比值

c++ - 'new'和 'delete'不同范围内的合法性和道德性