條件式載入?
以不支援陣列 indexOf() 的 IE8 為例(真弱),以前的作法是先載入再判斷要不要用。if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(obj, start) { for (var i = (start || 0), j = this.length; i < j; i++) { if (this[i] === obj) { return i; } } return -1; }; }對於不需要的瀏覽器,就多載入一個檔案或一段程式碼,如果可以先判斷再載入就很完美了,尤其是很大的檔案的時候,或有時候可以用來避免重複載入,這就是 yepnope.js 的一個重要功能。
<!DOCTYPE html> <html> <head> <meta charset="BIG5"> <title>RWD</title> <script src="yepnope.1.5.4-min.js"></script> <script> yepnope([ { test : Array.prototype.indexOf, nope : [ 'array_indexOf.js' ], complete : function() { alert(Array.prototype.indexOf); } } ]); </script> </head> <body> </body> </html>然後 array_indexOf.js 可以拿掉判斷的程式。
Array.prototype.indexOf = function(obj, start) { for (var i = (start || 0), j = this.length; i < j; i++) { if (this[i] === obj) { return i; } } return -1; };Chrome 得到的結果,沒有載入 array_indexOf.js。
Chrome 內建支援 Array.indexOf()。
IE11 得到的結果,一樣沒有載入 array_indexOf.js。
IE8 得到的結果,載入 array_indexOf.js。
IE8 使用自訂的 indexOf()。
完整的介紹請看 More in yepnope 1.5.4。
---
---
---
---
---
沒有留言:
張貼留言