爲什麼我的Javascript小部件在IE上無法正常工作,但在Firefox上很好?而且,Firebug不會產生任何錯誤。我能做些什麼來確保我的Javascript小部件在IE中運行?有什麼工具可以幫助我嗎?IE中的Javascript兼容性
回答
似乎與IE的兼容性問題。您可以在右下角查看標準JavaScript錯誤警報圖標。另外,IE Developer Toolbar很有用,但不如Firebug。最壞的情況下,開始投擲一些alerts
,直到找到斷點。
只是在黑暗中刺中,如果您使用的是console.log
,那麼在其他瀏覽器中會失敗。作爲一名開發人員,我之前已經離開過。
在IE8中打開小部件並使用它自帶的跛腳(與Firebug相比)開發人員工具欄(鍵盤快捷鍵:F12)。
不幸的是,JavaScript在所有瀏覽器中的工作方式都不盡相同。你幾乎只需要調試它。
查看http://blogs.msdn.com/b/ie/archive/2004/10/26/247912.aspx討論三種不同的工具,它們可以充當IE JavaScript的調試器。
在IE中JS的一個常見問題是對象和數組文字中的尾隨逗號:IE扼流圈和死亡。所有其他瀏覽器都很好。因此,尋找:
an_array = [1,2,3,]; // Trailing comma kills IE!
an_obj = {foo: "This is foo",
bar: "This is bar", // Trailing comma kills IE!
};
+1:我自己使用腳本在簽入代碼前使用regexp來檢查它。我有時會得到誤報,但這比我的老闆在凌晨2點打電話給我更好地修復損壞的更新要好得多。 – slebetman 2010-09-17 03:35:47
我不是IE的愛好者,但這是IE爲改變做正確事情的典型例子。讓壞代碼破壞。 – 2011-06-22 07:32:52
的IE 6+都符合相當不錯的ECMA規範(基本上涵蓋了所有的核心,如日期,Math和Array對象的Javascript「programmey」對象 - 任何處理數學或數據類型)。然而,如果你正在處理任何涉及標準W3C DOM的東西(那些與訪問HTML文檔的任何部分或其中的事件有關的對象),那麼很可能你的函數將在IE瀏覽器中出現kerplode,這一直落後於DOM規範超過十年。整個框架的建立是爲了彌補這一點。如果您正在處理事件或訪問HTML元素或其屬性,您將希望使用像JQuery這樣的框架,或者開始閱讀一些關於JavaScript的書籍,以瞭解您需要分支的對象和屬性。
要記住的另一件事是,所有的瀏覽器製造商通過實驗的方式添加自己的專有方法。因此,Firefox的非標準但非常流行的console.log。爲了公平對待MS(我仍然認爲這是卑鄙的),他們的XMLHttpRequest對象的原始版本就是所有這些Ajax內容的代碼,並且它們也給了我們innerHTML,它不是任何標準的一部分,但是被採用並且在所有瀏覽器。
基本上,所有瀏覽器都會解析和解釋他們自己的JavaScript版本。學習所有常見的全面工作,以及如何處理所有他們無法達成的共識,取決於你。我推薦Jeremy Keith的DOM腳本,然後是大巨人O'Reilly的書(我也喜歡奧斯本的大巨人完整參考書)。
網站:Quirksmode.org的內容似乎比過去少,但在編寫核心JS以彌補IE不足方面仍有很多好的建議。也有很多關於CSS的東西。
也許你需要從MDC
添加兼容算法這裏是Array.every
,Array.filter
,Array.forEach
,Array.indexOf
,Array.lastIndexOf
,Array.map
,Array.reduce
,Array.reduceRight
,Array.some
,Function.bind
,Object.keys
if(!Array.prototype.every)Array.prototype.every=function(fun,thisp){var len=this.length>>>0;if(typeof fun!="function")throw new TypeError;var thisp=arguments[1];for(var i=0;i<len;i++)if(i in this&&!fun.call(thisp,this[i],i,this))return false;return true}; if(!Array.prototype.filter)Array.prototype.filter=function(fun,thisp){var len=this.length>>>0;if(typeof fun!="function")throw new TypeError;var res=[];var thisp=arguments[1];for(var i=0;i<len;i++)if(i in this){var val=this[i];if(fun.call(thisp,val,i,this))res.push(val)}return res}; if(!Array.prototype.forEach)Array.prototype.forEach=function(fun,thisp){var len=this.length>>>0;if(typeof fun!="function")throw new TypeError;var thisp=arguments[1];for(var i=0;i<len;i++)if(i in this)fun.call(thisp,this[i],i,this)};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(elt){var len=this.length>>>0;var from=Number(arguments[1])||0;from=from<0?Math.ceil(from):Math.floor(from);if(from<0)from+=len;for(;from<len;from++)if(from in this&&this[from]===elt)return from;return-1}; if(!Array.prototype.lastIndexOf)Array.prototype.lastIndexOf=function(elt){var len=this.length;var from=Number(arguments[1]);if(isNaN(from))from=len-1;else{from=from<0?Math.ceil(from):Math.floor(from);if(from<0)from+=len;else if(from>=len)from=len-1}for(;from>-1;from--)if(from in this&&this[from]===elt)return from;return-1}; if(!Array.prototype.map)Array.prototype.map=function(fun,thisp){var len=this.length>>>0;if(typeof fun!="function")throw new TypeError;var res=new Array(len);var thisp=arguments[1];for(var i=0;i<len;i++)if(i in this)res[i]=fun.call(thisp,this[i],i,this);return res}; if(!Array.prototype.reduce)Array.prototype.reduce=function(fun){var len=this.length>>>0;if(typeof fun!="function")throw new TypeError;if(len==0&&arguments.length==1)throw new TypeError;var i=0;if(arguments.length>=2)var rv=arguments[1];else{do{if(i in this){var rv=this[i++];break}if(++i>=len)throw new TypeError;}while(true)}for(;i<len;i++)if(i in this)rv=fun.call(undefined,rv,this[i],i,this);return rv}; if(!Array.prototype.reduceRight)Array.prototype.reduceRight=function(fun){var len=this.length>>>0;if(typeof fun!="function")throw new TypeError;if(len==0&&arguments.length==1)throw new TypeError;var i=len-1;if(arguments.length>=2)var rv=arguments[1];else{do{if(i in this){var rv=this[i--];break}if(--i<0)throw new TypeError;}while(true)}for(;i>=0;i--)if(i in this)rv=fun.call(undefined,rv,this[i],i,this);return rv}; if(!Array.prototype.some)Array.prototype.some=function(fun,thisp){var i=0,len=this.length>>>0;if(typeof fun!="function")throw new TypeError;var thisp=arguments[1];for(;i<len;i++)if(i in this&&fun.call(thisp,this[i],i,this))return true;return false}; if(!Function.prototype.bind)Function.prototype.bind=function(context){if(typeof this!=="function")throw new TypeError;var _arguments=Array.prototype.slice.call(arguments,1),_this=this,_concat=Array.prototype.concat,_function=function(){return _this.apply(this instanceof _dummy?this:context,_concat.apply(_arguments,arguments))},_dummy=function(){};_dummy.prototype=_this.prototype;_function.prototype=new _dummy;return _function}; Object.keys=Object.keys||function(o){var result=[];for(var name in o)if(o.hasOwnProperty(name))result.push(name);return result};
- 1. IE兼容性錯誤 - CSS Javascript
- 2. IE/jQuery/CSS的兼容性
- 3. javascript與IE不兼容
- 4. Bootstrap Grid IE 8兼容性
- 5. IE兼容性模式
- 6. IE CSS不兼容性
- 7. ie 8兼容性問題
- 8. IE 11兼容性視圖
- 9. angularJS音頻IE兼容性
- 10. IE兼容性問題
- 11. IE和Socket.io兼容性
- 12. CSS IE兼容性問題
- 13. IE中的設計兼容性
- 14. JavaScript中的非IE瀏覽器兼容性所需的幫助
- 15. JavaScript兼容性庫
- 16. IE JS兼容性 - 在FF中工作?
- 17. Firefox的JavaScript的兼容性
- 18. 是X-UA兼容IE瀏覽器兼容性的答案?
- 19. Internet Explorer的JavaScript兼容性
- 20. IE 8的兼容性模式
- 21. IE-11的兼容性與框架4.5
- 22. 的CSS問題,IE/FF兼容性
- 23. React flexbox與ie 10的兼容性
- 24. 的JavaScript的indexOf VS Array.prototype.indexOf IE兼容性錯誤
- 25. IE用於Javascript角9兼容性:ChildNode,的setAttribute
- 26. IE瀏覽器兼容瀏覽器兼容性問題/ Firefox
- 27. 使IE與IE兼容
- 28. JavaScript和Flash與IE不兼容
- 29. IE兼容模式JavaScript函數不叫
- 30. Javascript開始與iPhone和IE不兼容
縮小的版本檢查你沒有粘貼的代碼的第34行第5列。 – MooGoo 2010-09-17 02:28:02
苛刻** MooGoo **,但它確實讓我LOL。 – 2010-09-17 02:31:16
這使我成爲了LOL,但我想我正在尋找更多關於解決問題的一般答案。例如,IE瀏覽器的Firebug工具? – syker 2010-09-17 03:19:50