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

我正在使用上面的代碼來查找可用的網頁寬度。它大部分時間都在工作。但是在一些移動瀏覽器(Mobile Chrome和一些移動瀏覽器)以及有時在桌面網站中,它返回0.我不知道,哪裏出了問題?window.innerwidth的意外行爲

的Mozilla/5.0(Linux的;的Android 5.1.1; SM-J500M構建/ LMY48B)爲AppleWebKit/537.36(KHTML,例如Gecko)鉻/ 56.0.2924.87移動Safari/537.36

這是一個用戶代理失敗。大多數情況下,它發生在Android瀏覽器的移動Chrome中。

+1

此代碼何時運行?當頁面嘗試獲取頁面寬度時頁面是否完全加載? – Pytth

+0

當平板電腦或移動設備播放「取向改變動畫」時(出於更好的條件),我已經看到了這種行爲。如果您正在收聽文檔上的onresize事件,並且發生了縱向與橫向之間的轉換,則在轉換動畫正在播放時,讀取視口大小有時會變爲0。我只能想象這是在瀏覽器內渲染優化的結果。 – jduncanator

回答

5

您可以嘗試強制將if中的測試設置爲布爾值。

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

擁有多於return語句的函數並不總是最佳實踐。你可以如下更清楚地說明。

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

如果不工作,那麼問題是,你已經找到了jQuery的寬度方法的錯誤。

+1

強制布爾檢查的有趣方法哈哈。我想在這種情況下,你甚至可以寫'return window.innerWidth || $(window).width();'因爲如果window.innerWidth返回0或未定義,我們仍然想嘗試jQuery方法。 – antoni