作者imphs (phs)
看板Ajax
標題[心得] chrome XMLHttpRequest 重寫問題解決
時間Sat Mar 13 13:13:12 2010
之前做一個網頁用到一個別人做的範例做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
1F:推 Sany:推~版主可以M一下嗎>? 03/14 01:09
2F:→ weiyucsie:其實看不是很懂...orz 03/15 21:11
3F:→ weiyucsie:不懂為什麼搶先重寫,還會進去if裡面@.@? 03/15 21:12
4F:→ weiyucsie:如果沒進去if裡面的情況,改掉感覺沒作用? 03/15 21:12
5F:→ TonyQ:起來應該是函式名稱衝突而已啦...:3 03/15 21:45
6F:→ imphs:在chrome 沒進到if 但還是取代掉原本的函式 這不是我要的~~ 03/16 10:51
7F:→ imphs:我本篇好像都沒註解~抱歉 03/16 10:52
8F:推 cojad:簡單來說...function XMLHttpRequest()雖然我們設定只有if成 03/18 14:15
9F:→ cojad:立的時候才要執行, 但是實際上在Chrome的瀏覽器的V8引擎中 03/18 14:17
10F:→ cojad:卻是已經不管if有沒有成立, 只要你有寫到這串..那個function 03/18 14:17
11F:→ cojad:就已經被取代了. 為了避免這種不應該成立的錯誤. 在條件式 03/18 14:18
12F:→ cojad:內要選擇要不要宣告函式但要避免被強迫宣告函示的時候 03/18 14:19
13F:→ cojad:應該使用XMLHttpRequest=function() {}的方法宣告..而不要直 03/18 14:20
14F:→ cojad:接以function XMLHttpRequest() {}宣告, 不然Chrome不管你的 03/18 14:20
15F:→ cojad:的判斷式是否成立都會直接把XMLHttpRequest給取代(宣告)掉了 03/18 14:21