2013-03-15 69 views
0

首先,我從我的頁面獲取此iframe。從iframe中的父窗口調用javascript函數,但iframe src來自遠程機器

<iframe src="https://192.168.100.87/index.html"> 
    <p>Browser does not support iframe</p> 
</iframe> 

我從我的頁面頭標記有以下腳本。

<head> 
    <script type="text/javascript"> 
     function callMe(){ 
     alert('called'); 
     } 
    </script> 
</head> 

而且我從遠程機器的index.html中獲得以下代碼。

<body> 
    <input type="button" value="Click" onClick="window.parent.callMe()" /> 
</body> 

正如你所看到的,我打電話給我的主頁的功能,我的iframe被包括在內。 但不幸的是我不能調用該函數。

這是可能的,我在這裏失蹤了什麼? 謝謝

+0

你先試過了嗎? – 2013-03-15 03:48:35

+0

是的。它不工作。 :) – 2013-03-15 03:49:17

+0

所以這就是你的答案...大聲笑.. :) – 2013-03-15 03:50:41

回答

2

您無法在另一個域訪問屬性或調用窗口的方法。但是,您可以使用postMessage將消息發送到其他域的幀(請參閱https://developer.mozilla.org/en-US/docs/DOM/window.postMessage)。

嘗試parent.postMessage('testing', '*');。第一個參數是要發送的數據;第二個是您要發送給它的窗口的域。使用'*'讓我們把它發送給任何主機,但爲了更好的安全性,你應該使用父母的實際域。

然後在您的父頁面:

window.addEventListener('message', function(event) { 
    if (event.data == 'testing') { 
     callMe(); 
    } 
}); 

在現代瀏覽器裏,才能工作。如果您需要支持舊版瀏覽器(如IE 7或更舊版本),請查找postMessage填充。

+0

這就是我要找的。我會嘗試這一個。謝謝。 – 2013-03-15 04:09:55

+0

這不適合我的測試。我使用IE9 btw。 – 2013-03-15 06:25:33

+0

其工作now.i必須使用window.attachEvent爲IE9。 – 2013-03-15 08:41:31