2009-06-10 14 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(クロスサイトスクリプティング)を読んで、それをよりよく理解することをお勧めします。 –

答えて

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

関連する問題