2009-07-15 15 views
2

新しいウィンドウがポップアップするページにリンクがあり、その2番目のウィンドウに読み込みに時間がかかることがあります。 子ウィンドウの読み込みが完了するまで、親ウィンドウのリンクを無効にしたいとします。 私は親に警告するために子ウィンドウのonload()を持つことができますが、私は子を混乱させたくないので、子ウィンドウをポーリングしてそれが何かデータがあるかどうかを調べるjavascriptを持っていますそれは動作しません。 私はnewwindow.document.getelementbyidを使用できません。なぜなら、そのページに特定の要素が存在することは決してないからです。 私はちょうどそれがどこかにあるかどうかを見たいと思う。子ブラウザウィンドウの読み込みが完了したかどうかを確認するにはどうすればよいですか?

+0

子ウィンドウには何がロードされていますか?自分のWebドメインのコンテンツ、または外部ドメインのコンテンツですか? – James

答えて

2

bodyタグを取得して、子タグがあるかどうかを調べることができます。そうであれば、ページはロードされているか、または非常に近い状態にあります。 IMOを十分に閉じます。

子のURLが同じドメインでない場合は、何もできません。これはXSSの脆弱性です。

+0

これは私が探していたものです。ありがとうございます。 – stu

3

子ウィンドウのloadイベントにリスナーを追加するだけです。ここでは本当に基本的な例は、

<html> 
<head> 
<script type="text/javascript"> 

onload = function() 
{ 
    document.getElementById('test').onclick = function(event) 
    { 
    event.preventDefault(); 
    event.returnValue = false; 
    var link = event.target || event.src; 
    var childWin = window.open(link.href, 'child', 'width=400,height=300'); 
    childWin.onload = function() 
    { 
     alert('child window loaded!'); 
    } 
    } 
} 

</script> 
</head> 
<body> 

<a href="test2.html" id="test">test</a> 

</body> 
</html> 

者注:私はあなたが子供にロードされているURLは、親と同じドメインに属している場合にのみ動作することを伝える必要があります。ブラウザのセキュリティモデルにより、そうしないようにすることができます。

+0

はおそらくそのようなonloadを設定すべきではありません。あなたはそこにあったものを上書きしています。お使いのブラウザに応じて、attachEventまたはaddEventListenerを使用してください。 – geowa4

+0

私は同意します - 私はこの単純な例の完全な抽象化プロセスを実際には望んでいませんでした - あるいは、私が実際に生産システムで行うことを、jQueryのようなものを使って行います。 –

+0

"親に警告するために子ウィンドウのonload()を持つことができますが、私は子供を混乱させたくありません" - あなたのソリューションが自分の望むものであれば分かりません。しかし、私は間違いなくそれを行うより良い方法に同意します。 – geowa4

関連する問題