作者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