簡體   English   中英

JavaScript window.opener調用父函數

[英]JavaScript window.opener call parent function

我試圖從子窗口調用父類中定義的javascript函數。 我有兩個這樣的文件:

家長:

<html>
<head>
<title>Test</title>
<script type="text/javascript">
function foo () {
alert ("Hello from parent!");
}
function doStuff () {
var w = window.open("testa.html");
}
</script>
</head>
<body>
<input type="button" value="open" onClick="doStuff();" />
</body>
</html>

和孩子:

<html>
<head>
<title>Test A</title>
<script type="text/javascript">
function get() {
window.opener.foo();
}
</script>
</head>
<body>
<input type="button" value="Call Parent" onClick="get();" />
</body>
</html>

在我的生活中,我不能從子進程中調用函數foo。 我認為這應該可以使用window.opener對象,但我似乎無法使這個工作。 有什么建議?

確保您通過http://訪問此內容,以便通過相同的原始策略,您可以從子項訪問opener。 如果您只是使用file://,它將無法工作。

回答Rahul的問題:

每個瀏覽器都可以從服務器或本地文件系統加載頁面。 要從本地文件系統加載文件,你應該在瀏覽器中輸入這樣的地址file://[path] ,其中[path]是文件系統中文件的絕對路徑(包括Windows上的驅動器號,請參閱http:// blogs .msdn.com / b / ie / archive / 2006/12/06 / file-uris-in-windows.aspx了解詳情)。

要從本地HTTP服務器(如果有的話)加載文件,你應該設置類似這樣的http://localhost:[port]/[path] ,其中[port]是服務器運行的端口(默認為80)和[path]是文件相對於服務器文檔根文件夾的路徑。 文檔根文件夾取決於服務器配置。

因此,如您所見,可以通過兩種方式將相同的本地文件加載到瀏覽器中。 然而,這兩種方式之間存在很大差異。 在第一種情況下,瀏覽器不使用HTTP協議來加載文件,因此缺少許多不同機制正常工作所必需的東西。 例如,AJAX不能與本地文件一起使用,因為HTTP響應狀態不是200,等等。

在此特定示例中,瀏覽器安全機制未獲取原始信息並且無法訪問父窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM