【问题标题】:Can't call function of parent window in child window子窗口不能调用父窗口的函数
【发布时间】:2015-07-21 12:38:27
【问题描述】:

我有一个问题,我不能在子窗口中调用父窗口的函数。

var value = "test";
function drawChart() {
    myWindow = window.open("", "Chart", "width=500, height=500");
    myWindow.console.log(parent.value);
    myWindow.parent.createGraph();
}

function createGraph(){
  ...
}

我可以访问全局变量值,但不能调用函数 createGraph。 我收到错误:

未捕获的类型错误:myWindow.createGraph 不是函数

我将所有 javaScript 都移到了头部,但仍然无法正常工作。

【问题讨论】:

  • 有几件事我无法理解:从父窗口调用 myWindow.parent.createGraph;但是 createGraph 在父级中,所以为什么不直接在父级中调用它。此外,您遇到“未捕获的 TypeError:myWindow.createGraph 不是函数”的错误很奇怪,因为它接缝您正在调用“myWindow.createGraph()”而不是 myWindow.parent.createGraph()。你能展示一个 jsfiddle 吗?
  • myWindow 是您的 child 窗口,而不是您的父窗口,对吧?试试this
  • @DontVoteMeDown 是的,它是子窗口
  • 请在jsFiddleCodePenjsBin 或其他类似网站上提供演示。

标签: javascript jquery


【解决方案1】:

我想你在追求:

window.opener:返回对打开当前窗口的窗口的引用

因此,例如,在您的弹出窗口中,您可以像这样调用您的函数:

window.opener.createGraph();

编辑:当然,它不会以你一直在尝试的方式工作!您需要在打开的子窗口范围内调用父函数。您正在做的是在触发子窗口的同一函数中调用它们,而在子窗口中NOT

这是一种与您的代码相同的行之有效的方法。请记住,这仅在 Chrome 上进行了测试。

$("button").on("click", function() {
    var win = window.open("", "Chart", "width=400,height=400");
    win.console.log("New window");
    win.callFunc = function(fn) {
        win.console.log(fn());
    }
    win.callFunc(aParentFunction);   
});

function aParentFunction() {
    return "Hiya, I am your dad.";
}

A Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多