[心得] chrome XMLHttpRequest 重寫問題解決

看板Ajax作者 (phs)時間14年前 (2010/03/13 13:13), 編輯推噓2(2013)
留言15則, 5人參與, 最新討論串1/1
之前做一個網頁用到一個別人做的範例做ajax 那時還沒出chrome if (typeof XMLHttpRequest == "undefined" && window.ActiveXObject) { function XMLHttpRequest() { var arrSignatures = ["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i=0; i < arrSignatures.length; i++) { try { var oRequest = new ActiveXObject(arrSignatures[i]); return oRequest; } catch (oError) { //ignore } } throw new Error("MSXML is not installed on your system."); } } 後來卻發現 chrome 無法執行 檢查發現 chrome 會搶先重寫 XMLHttpRequest() 函式 將 function XMLHttpRequest() {} 改為 window.XMLHttpRequest = function() {} 就行了 每家瀏覽器實作還真不一樣... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.2.212

03/14 01:09, , 1F
推~版主可以M一下嗎>?
03/14 01:09, 1F

03/15 21:11, , 2F
其實看不是很懂...orz
03/15 21:11, 2F

03/15 21:12, , 3F
不懂為什麼搶先重寫,還會進去if裡面@.@?
03/15 21:12, 3F

03/15 21:12, , 4F
如果沒進去if裡面的情況,改掉感覺沒作用?
03/15 21:12, 4F

03/15 21:45, , 5F
起來應該是函式名稱衝突而已啦...:3
03/15 21:45, 5F

03/16 10:51, , 6F
在chrome 沒進到if 但還是取代掉原本的函式 這不是我要的~~
03/16 10:51, 6F

03/16 10:52, , 7F
我本篇好像都沒註解~抱歉
03/16 10:52, 7F

03/18 14:15, , 8F
簡單來說...function XMLHttpRequest()雖然我們設定只有if成
03/18 14:15, 8F

03/18 14:17, , 9F
立的時候才要執行, 但是實際上在Chrome的瀏覽器的V8引擎中
03/18 14:17, 9F

03/18 14:17, , 10F
卻是已經不管if有沒有成立, 只要你有寫到這串..那個function
03/18 14:17, 10F

03/18 14:18, , 11F
就已經被取代了. 為了避免這種不應該成立的錯誤. 在條件式
03/18 14:18, 11F

03/18 14:19, , 12F
內要選擇要不要宣告函式但要避免被強迫宣告函示的時候
03/18 14:19, 12F

03/18 14:20, , 13F
應該使用XMLHttpRequest=function() {}的方法宣告..而不要直
03/18 14:20, 13F

03/18 14:20, , 14F
接以function XMLHttpRequest() {}宣告, 不然Chrome不管你的
03/18 14:20, 14F

03/18 14:21, , 15F
的判斷式是否成立都會直接把XMLHttpRequest給取代(宣告)掉了
03/18 14:21, 15F
文章代碼(AID): #1Bcnxhqk (Ajax)