1

我有一個網站使用jQuery 2.0+,並希望在未加載jQuery的情況下執行操作。從本質上說,我檢查不支持的jQuery 2,如IE8,7,6,我在jquery.check.js這樣做任何像這樣的瀏覽器等使用ASP.NET檢查jQuery綁定失敗,IE8

if (typeof window.jQuery == 'undefined') { 
    //show not supported page 
} 

的BundleConfig是做捆綁這樣的:

var b1 = new ScriptBundle("~/bundle/js").Include(
      "~/Scripts/jquery-{version}.js", 
      "~/Scripts/jquery.check.js" 
      ); 
     b1.Orderer = new InputBundleOrderer(); 
     b1.Transforms.Clear(); //this removes the mimification for debugging purposes 

     bundles.Add(b1); 

debug="true"代碼工作就好了。當轉向false它不起作用。在使用IE8進行調試時,if聲明從未達到過,並且存在一堆錯誤。

聽起來像IE8停止執行JavaScript文件時發生錯誤,因此代碼塊永遠不會到達。當debug="true"(單獨加載文件)並且在捆綁(單個文件)時不起作用時,這是我能夠想出爲什麼它會工作的唯一原因。

我的推理是否正確?

+0

我最終解決了問題,通過從包中排除jquery.check.js並將其添加爲單獨的引用。這基本上證明了我的想法是正確的。 –

回答

2

據我所知你是對的。一旦發生錯誤,腳本就會停止執行該文件。 如果你真的想把它們放在同一個文件中,你可以嘗試用try/catch/finaly塊來包圍jQuery聲明(不知道這是一個好的ideea:|)

另外,如果你使用.min用於製作的.js文件我相信你不應該把它包含在bundel中。

1

爲什麼不使用類似modernizr的東西來爲你做這些測試?這就是它設計的目的。您甚至可以爲瀏覽器使用load the correct version of jQuery。儘管更簡單的選擇是使用條件註釋。

<!--[if lt IE 9]> 
    <script src="jquery-1.9.0.js"></script> 
<![endif]--> 
<!--[if (gte IE 9) | (!IE)]><!--> 
    <script src="jquery-2.0.0.js"></script> 
<!--<![endif]--> 

我不知道你爲什麼會「不支持」舊的瀏覽器,因爲jQuery的1.9+是功能兼容的jQuery 2.x中,你只需要調用合適的一個正確的瀏覽器。

你爲什麼要做轉換。清除()?調試模式自動刪除縮小..

+0

此時,決定不支持IE8的原因有兩個:1. IE8用戶只佔我們訪問者的一小部分,而且一直在快速下降,2.該網站僅用jQuery 2.0+進行測試。我們沒有時間用IE8和1.9重新測試它。此外,我不想依賴瀏覽器的具體條件,檢查功能的存在,財產是一個更好的方式去。 如果您閱讀發佈的代碼的評論,我故意刪除縮小以用於調試目的。我知道發生了什麼後,刪除了這一行。 –

+0

@JonasStawski - 我希望能爲你解決問題。我的經驗是,總是發現一些高價值的客戶正在使用IE8,並且突然之間,你正在使用IE8。無論如何,你仍然可以使用jQuery版本測試。再次,jQuery 1.9+和2.0+在功能上是完全相同的,並且已經通過jQuery進行了測試。 –

+0

感謝您的輸入。在這個遊戲中,我們需要快速移動,這意味着要留下IE8。我同意我們可能會放棄一些重要的IE8用戶,如果發生這種情況,我們會很快發現並需要通過您的一種方法開始支持它... –