2017-03-04 17 views
7
if(window.innerWidth) { 
    return window.innerWidth; 
} 
return $(window).width(); 

私は上記のコードを使用して、Webページの利用可能な幅を探しています。それはほとんどの時間に働きます。しかし、一部のモバイルブラウザ(モバイルChromeなど)では、デスクトップのウェブサイトでは0が返されます。わからない、何が問題になりましたか?window.innerwidthの予期しない動作

のMozilla/5.0(Linuxでは、アンドロイド5.1.1; SM-J500Mビルド/ LMY48B)のAppleWebKit/537.36(ヤモリ様KHTML)クローム/ 56.0.2924.87モバイルサファリ/ 537.36

これには以下のいずれかそれが失敗したユーザエージェント。主にアンドロイドブラウザのモバイルクロムで発生します。

+1

このコードはいつ実行されますか?ページ幅を取得しようとしたときにページが完全に読み込まれていますか? – Pytth

+0

タブレットやモバイルデバイスが「方向変更のアニメーション」を再生しているときにこの現象が見られました。ドキュメント上でonresizeイベントを待ち受けていて、ポートレートからランドスケープへのトランジションが発生すると、トランジションアニメーションが再生されている間にビューポートサイズを読み取ると結果が0になることがあります。私はこれがブラウザ内での最適化のレンダリングの結果であると想像することができます。 – jduncanator

答えて

5

ifのテストをブール値にすることをお勧めします。関数内returnステートメントでより多くを持つ

if(!!window.innerWidth) { 
    return window.innerWidth; 
} 
return $(window).width(); 

は常にベストプラクティスとはみなされません。これを次のように明確にすることができます。

return !!window.innerWidth ? 
    window.innerWidth : 
    $(window).width(); 

これが機能しない場合は、jQueryのwidthメソッドにバグが見つかりました。

+1

ブーリアンチェックを強制する面白い方法です。私はこのケースではあなたが 'return window.innerWidth || $(window).width(); 'window.innerWidthが0を返すか未定義なので、jQueryメソッドを試したいからです。 – antoni