我確實有一個使用媒體查詢的HTML5文檔。爲了迎合舊版瀏覽器的用戶,我只是試圖模擬JS中的行爲,並使用modernizr 2.5.3(我昨天從HTML5 Boilerplate下載的文件)來執行mq-testing。modernizr 2.5.3 IE和Opera中的媒體查詢測試中斷頁面
我想要做的另一件事是如果客戶端使用簡單的Modernizr.touch
支持觸摸事件,則稍微改變UI。
我這個做如下方式:
//$window is $(window)
if ($window.width() < 575 || Modernizr.touch){
//change UI layout a little
}
if (Modernizr.touch){
//enable tap-navigation for touch devices
}
if (!Modernizr.mq('only all and (min-width: 575px)')){ //fix non-media query browsers
$window.resize(function(){
if ($window.width() < 575){
//add CSS
} else {
//remove CSS
}).trigger('resize');
}
這工作在Webkit的罰款(移動和桌面)和Firefox,但是當我嘗試打開Opera中的頁面(11.6)或Internet瀏覽器(7到9)地獄崩潰。事件會隨機發動一段時間,jQuery動畫會中途停止,老實說,我不知道會發生什麼事情(儘管沒有控制檯錯誤)。當我在頁面頭部刪除modernizr腳本時,它運行得很好(當然除了功能檢測...)。
什麼我也做的是使用html5shiv
(我加載這個後的Modernizr的,但仍然在目),如:
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
我懷疑這是罪魁禍首IE瀏覽器出現故障,但由於這不會影響Opera的行爲,所以我有點無知。
我做錯了什麼或者是這種錯誤,我應該尋找另一種方式來做我的功能檢測?
編輯:
雖然我試圖找出發生了什麼事,我發現了以下工作:什麼似乎是萬惡之源就是媒體查詢測試:Modernizr.mq('only all and (min-width: 575px)')
。一旦這被稱爲事情變得瘋狂。我可以將它記入控制檯並獲得正確的結果,但它似乎以某種奇怪的方式破壞了某些東西。另外,我可以通過從控制檯調用它來打破正在運行的頁面(以前沒有調用過該頁面)。
EDIT 2號:
在尋找一種替代的方法來處理功能的測試,我發現this library了在dev.opera那(哇!)似乎在Opera中很好地工作。
style.innerText = '@media ' + str + ' { #'+id+' { display:none !important; } }';
咩:然而,它並不在IE瀏覽器(WebKit和火狐都很好),因爲它抱怨工作。
EDIT 3號:
於是我就降級到2.0.6 Modernizr的事情和現在所有的瀏覽器工作得很好。儘管我仍然不確定這是一個錯誤還是我做錯了,所以我寧願等一段時間才能自己回答。
我遇到了同樣的問題。當我使用Modernizr.mq()時,我在頁面上丟失了所有的功能,只是在IE中。 (沒有測試歌劇)。我也沒有看到控制檯中的任何錯誤。 – 2012-04-24 13:38:42
@EdCharbeneau做了降級幫助你嗎?爲我完美工作。 – m90 2012-04-24 15:30:31
我使用另一個依賴於modernizr的庫,所以我不想降級並冒險破壞別的東西。我在下面給出了一個答案,爲我解決了這個問題,不幸的是它給了我另一個依賴。我不開心,但是它是開源的,你必須把好與壞。 – 2012-04-24 15:44:09