2011-11-09 4 views
2

メインページからwindow.openを使用してポップアップウィンドウを作成すると、子/ポップアップページはwidth/heightを表示するonloadイベントを使用します。しかし、クロムでは常に0が返されます。ウィンドウとドキュメントの幅と高さの両方を確認すると(jQueryの有無にかかわらず)0だけが返されます。タブ内の子ページを読み込むだけで、常に幅と高さが正しくレポートされます。クロムのjQueryロードイベントは、ポップアップで幅/高さの値が0になる

この動作は正しいですか?ロードイベントに何か問題はありますか? Chromeで?幅/高さプロパティが設定されていることを保証するために待つことができる別のイベントがありますか?

オンロードにタイムアウトが設定されていると、正しい値が得られる可能性が高くなります。しかし、それはちょうどあなたが幅/高さを確認する前にどのくらい待つべきかについての推測ゲームと思われる。特定のイベントを待つ方法はありません確かに子ウィンドウの幅と高さはChromeで設定されていますか?

両方のページで以下のクイックデモをご覧ください。誰かを願っているのは、setTimeoutに入れる時間が不確定であると推測することを伴わない解決策があるかもしれません。

を編集してください:私はこれをChromeバージョン14/15でテストしました。私が使用したhttp://api.jquery.com/height/

main.htmlを

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
    <head> 
     <title>main</title> 
    </head> 
    <body> 
     <input type="button" value="Pop" onclick="window.open('http://localhost:8085/social_test/test.html', 'namedWnd', 'width=320,height=240')" /> 
    </body> 
</html> 

test.htmlというあなたの代わりに$(ウィンドウ)の$(文書)を使用していない理由を

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
    <head> 
     <title>test</title> 
     <script type="text/javascript" src="jquery-1.6.4.js"></script> 
     <script type="text/javascript"> 
      $(window).load(function(){ 
       var report = function() { 
        alert($(window).width() + " x " + $(window).height()); 
       }; 
       report(); 
       //window.setTimeout(report, 1000); 
      }); 
      // without any jquery 
      /*window.onload = function() { 
       var report = function() { 
        alert(window.innerWidth + " x " + window.innerHeight); 
        // or document's size 
        //alert(window.document.documentElement.clientWidth 
        // + " x " + window.document.documentElement.clientHeight); 
       }; 
       report(); 
       //window.setTimeout(report, 1000); 
      };*/ 
     </script> 
    </head> 
    <body/> 
</html> 
+1

あなたは身体にいくつかのコンテンツを追加する場合、何? – roberkules

+1

あなたのコードは、基本的にChrome 16で動作しました。正しい寸法を表示します。 – david

+0

これは実際には、ドキュメントの幅と高さを確認している限り動作するようです。 – Nicholi

答えて

1

それは自分のためのポップアプリで、それは動作し、タイムアウトや何もなし

+0

ちょうど$(document)でもう一度試してみると、間違って正しい値が返されているようです。ポップアップを開いたままにしておくと(ポップアップを閉じた後で)、正しい値の報告が停止されます。また、使用しているChromeのバージョンは不思議です。 – Nicholi

+0

私の文書の本文は本当に空だから、明らかに0しか報告しません。に何かを加えて、私はいつも再現可能な答えを得ているようです。ありがとう。 – Nicholi

+0

@ニコリ - なぜ$(ウィンドウ)が明らかに0を返すべきですか? "$(window).height(); //ブラウザビューポートの高さを返します。" ブラウザビューポートのサイズは、内部のものの影響を受けてはなりません。 – david

0

試してください:

$(document).load(function(){ 
    function report() { 
     alert($(window).width() + " x " + $(window).height()); 
    }; 
    report(); 
}); 
+0

私は実際にそれを元に試みましたが、イベントはまったく発射されないようです。ドキュメントにロードイベントがありますか? – Nicholi

+0

なぜ、$(document).readyを使用していないのですか? –

+0

$(document).readyまたは$(document).loadはどちらですか?私は、完全なウィンドウがロードされるのを待つことが、準備されたイベント(ウィンドウまたはドキュメントのいずれか)よりも賢明であると考えました。この問題は、Chromeがやっていた作業(setTimeouts)を完了するのを待っているようだったので、 $(document).ready $(window).width/height関数を使用しても、とにかく動作しません。 – Nicholi

1

常に$(window)

ソリューションの代わりに$(document)を使用する権利ではないかもしれません。(例えば)jQueryの問題を持つ誰もが直接ダブルチェックするためにDTDが本当に次のDTD を指しているかどうかを指摘しなければなりませんhttp://www.w3.org/TR/html4/loose.dtd

参考:http://bugs.jquery.com/ticket/12426

+0

この問題の状態が何であるか再度確認する必要があります。かなりの数の人々が指摘したように、私の問題は(ほとんどの場合)ドキュメント本体に何かを追加するだけで解決されました。 – Nicholi

関連する問題