2015-07-21 90 views
-1

我有在子窗口中无法调用父窗口功能的问题。在子窗口中不能调用父窗口的功能

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

function createGraph(){ 
    ... 
} 

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

Uncaught TypeError: myWindow.createGraph is not a function

我感动所有的JavaScript头,但仍然没有工作。

+1

有几件事情我无法理解:您所呼叫myWindow.parent.createGraph父窗口;但createGraph在父类中,所以为什么不直接在父类中调用它。此外,你有“Uncaught TypeError:myWindow.createGraph不是函数”的错误很奇怪,因为它接近你调用“myWindow.createGraph()”而不是myWindow.parent.createGraph()。你可以展示一个jsfiddle吗? – pinturic

+0

'myWindow'是你的孩子*窗口,而不是你的父母,对吧?试试[this](http://stackoverflow.com/q/1777864/1267304)。 – DontVoteMeDown

+0

@DontVoteMeDown yap它是子窗口 –

回答

1

我认为你是后:

window.opener : Returns a reference to the window that opened this current window

因此,例如,您的弹出窗口内,你打电话给你之类的函数:

window.opener.createGraph(); 

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

沿着代码的相同路线,这是一种拙劣的方式。请记住,这仅在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

+0

我试过这个,不行,我也试过window.top –