2015-07-21 92 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 –