2009-06-10 56 views
0

我的HTML中有一個iframe,並且我想在完全加載時收到通知。我有這樣的測試用例:加載iframe的事件處理程序未觸發

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<title>Test</title> 

<script language="javascript" type="text/javascript"> 
function addListener(el, type, func, capture) { 
    if (el.addEventListener){ 
     el.addEventListener(type, func, capture); 
    } else if (el.attachEvent){ 
     el.attachEvent('on'+type, func); 
    } 
} 
function addhandlers(frame) { 
    addListener(frame, "load", function(e) { onDomLoaded(e); }, true); 
} 
function onDomLoaded(e) { 
    alert("loaded"); 
} 
</script> 

</head> 
<body> 
<form action="#"> 
<input type="button" value="Add handlers" onclick="addhandlers(window.frames[0]);" /> 
</form> 

<iframe id="frm" height="300" src="test.htm" width="700"></iframe> 

</body> 
</html> 

的TEST.HTM文件僅僅是一個帶有幾個經常聯繫的地方標準的HTML文件。

首先我點擊添加處理程序按鈕添加偵聽器,然後點擊iframe中test.htm中的任何鏈接。我的期望是,我得到了一個警報,但沒有任何反應。爲什麼,以及如何解決它?我目前正在尋找一個解決方案,在Firefox和IE瀏覽器(但任何瀏覽器都沒有發生)。

+0

**您不能訪問不在您的域中的IFrame,期間**。這是德克薩斯州的一個安全漏洞。大多數(如果不是所有的)現代瀏覽器都在內部阻止它。我建議你閱讀XSS(跨站點腳本)來更好地理解它。 – 2010-01-02 05:38:45

回答

0

一種解決方法將包括TEST.HTM在JavaScript中

TEST.HTM:

function addListener(el, type, func, capture) { 
    if (el.addEventListener){ 
      el.addEventListener(type, func, capture); 
    } else if (el.attachEvent){ 
      el.attachEvent('on'+type, func); 
    } 
} 
function addhandlers(frame) { 
     addListener(frame, "load", function(e) { onDomLoaded(e); }, true); 
} 

function onDomLoaded(e) { 
    window.parent.iframeLoaded() 
} 

parentpage.htm:

function iframeLoaded() { 
    alert('loaded'); 
} 

請注意,這僅適用,如果這兩個文件在同一個域上

+0

不幸的是,我不能在實際設置中更改test.htm頁面,因爲它可能位於另一個域中。 – Tominator 2009-06-10 12:00:48

相關問題