2012-11-09 60 views
10

我碰到這個項目偶然:https://github.com/termi/ES5-DOM-SHIM它提供了所有的瀏覽器,包括舊的IE幾乎完全ES5支持。我一直在純JS項目中使用它,但現在我將jquery/mootools/prototype包含在項目中(使用High Charts)。使用ES5墊片與jQuery/MooTools的/原型

即使只是包括jQuery腳本導致要在IE8與此墊片一起引發的錯誤。我怎樣才能保持兩全其美?

我的文檔頭看起來是這樣的:

<!--[if lte IE 8]> 
<script src="/js/a.ie8.js"></script> 
<![endif]--> 
<script src="/js/a.js"></script> 
<script src="/js/jquery.1.8.2.js"></script> 
<script src="/js/main.js"></script> 
+1

你的'main.js'文件在做什麼?你從哪裏得到一個錯誤,哪一個?我把我的水晶球留在家中。 – Bergi

+0

@Bergi我的main.js現在是空的。錯誤是:'對象不支持此屬性或方法 - a.ie8.js,第46行字符428' – Greg

+0

那麼,該文件的第46行(及其上下文)是什麼? – Bergi

回答

1

確保您使用正確的HTML結構,例如:

<!DOCTYPE html> 
<head> 
    <meta charset="UTF-8"> 
    <!--[if lte IE 8]> 
    <script src="a.ie8.js"></script> 
    <![endif]--> 
    <script src="a.js"></script> 
    <script src="jquery.1.8.2.js"></script> 
    <script src="main.js"></script> 
</head> 
<body> 

</body> 

當我測試你的結構(沒有DOCTYPE)我也是在IE中出現錯誤。

1

這是一個遲到的答案,可能它沒有解決你的主要問題。所以冒着被低估的風險...

從Github項目中我可以看出ES5-DOM-SHIM不僅爲ES5功能提供填充,而且試圖填充IE上不可用的DOM功能。如果您希望直接使用DOM API進行編程,這非常有用。

的jQuery還提供了做功能檢查,以便填補執行方面的差距(所以你並不需要一個DOM填充工具,如果你的代碼只使用jQuery的)一個兼容層。

混合兩者似乎並沒有因爲一個好主意:

  • 你在你的JS大量重複填充工具的邏輯。
  • 填充有限制,所以如果jQuery認爲你的瀏覽器完全支持一個功能,當它不,你可以得到一些意想不到的錯誤。

如果你想只有JavaScript polyfills,嘗試用https://github.com/kriskowal/es5-shim(注意ES5-DOM-SHIM是基於它)

0

首先,一定要一個DOCTYPE添加到您的HTML文檔:

<!DOCTYPE html> 

它必須位於HTML文件的第一行。這使得舊的IE工作在符合標準的模式,並避免一些怪癖。

另一方面,ES5-DOM-SHIM似乎試圖做得太多,你當前想要使用jQuery,它已經提供了處理跨瀏覽器的DOM不一致性的方法。

我建議您只使用jQuery,如果您需要支持新的HTML5元素和/或自定義元素,請使用HTML5shiv(實際上在IE上添加HTML5元素支持的方式)。如果您真的需要ES5/6墊片,那麼請使用社區提供的更廣泛支持的庫,如es5-shimes6-shim