【问题标题】:Call JavaScript of parent window from child window从子窗口调用父窗口的 JavaScript
【发布时间】:2013-06-14 05:43:23
【问题描述】:

我有一个日历,当我点击<td> 时,会出现一个弹出窗口,以便您可以为所选日期创建晚宴。我想添加一个功能。

当用户完成创建事件时,我想向父页面发送一个 JavaScript 请求,以便我可以使用 AJAX 刷新日历。基本上,我想从孩子调用一个函数,但该函数在父页面上。

在 Google 上,我只找到了一个可以刷新父窗口的脚本——没有关于“父回调”的内容。 ☹ 有可能吗?

附:答案可以是纯 JS 也可以是 jQuery,没关系。在此期间我会继续寻找。

【问题讨论】:

  • @Neal David 说他在 Google 上搜索过诸如“父母回调”之类的东西,我认为,如果他的搜索很彻底,这是一个合理的努力。请注意,据我所知,David 并没有要求完整的代码来更新和显示日历。他只是要求一个弹出窗口调用其父窗口中的函数的通用方法。
  • 这是一个非常有效的问题,已经被抛出了很多,我不知道为什么它被否决了。我可以想象,在即将到来的浏览器版本中,我们将看到 javascript 能够与窗口平台进行更深入的交互。
  • 感谢两位为这个问题辩护。我只是在问一个“操作方法”,但不需要代​​码......是的,我做了一些研究,我发现的只是如何刷新父窗口。我什么也没找到。现在希望以后这个问题能上谷歌热搜,帮助更多有需要的人。

标签: javascript jquery popupwindow


【解决方案1】:

您要查找的是对打开弹出窗口的window 的引用。一旦你有了它,你就可以在那个窗口中调用函数,在那个窗口中读写变量,甚至操作它的 DOM。

该引用称为opener。它为您提供了打开当前窗口的窗口的window 对象。例如,如果您在原始窗口中有这样的功能:

function updateMe( data ) {
    alert( data );
}

然后在弹出窗口中你可以这样称呼它:

opener.updateMe( 'Hello!' );

当然,您需要确保updateMe() 是原始页面中的全局函数。或者如果您在原始页面中有某个对象并且updateMe() 是该对象的方法,您仍然可以这样做,只要该对象是全局的。例如在主机页面中:

var myObject = {
    updateMe: function( data ) {
        alert( data );
    }
};

然后在弹出窗口中你可以这样做:

opener.myObject.updateMe( 'Hello!' );

基本上,只要您可以使用window.whatever 访问原始页面中的对象或函数,然后在弹出窗口中您只需将其更改为opener.whatever

【讨论】:

  • 谢谢。从我所看到的,这就是我一直在寻找的。我明天上班试试!
  • 它就像一个魅力!非常感谢,我今天学到了一些东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 2011-02-15
相关资源
最近更新 更多