2011-12-19 25 views
4

僅在IE9中發生(在Firefox中它工作正常) 嘗試將安全設置降至最低。 我不確定其他版本的IE,因爲我已經安裝了9個。在IE9中新的XMLHttpRequest導致JScript運行時錯誤:對象不支持此屬性或方法

環境:asp.net 3.5 web表單 腳本框架:Anthem.NET,jQuery的

國歌腳本試圖創建XMLHttpRequest實例和失敗 我嘗試過創建自己的頁面上,並有同樣的錯誤。 在同一個項目上,我創建了一個新的html頁面,它工作正常。

所以它可能是一些腳本勾結...

有人嗎?

下面是從系統上運行的Anthem.NET框架內採取失敗(第3行)原代碼:

function Anthem_GetXMLHttpRequest() { 
if (window.XMLHttpRequest) { // <-- This passes as True! window.XMLHttpRequest is {...} 
    return new XMLHttpRequest(); // <---- Fails here 
} else { 
    if (window.Anthem_XMLHttpRequestProgID) { 
     return new ActiveXObject(window.Anthem_XMLHttpRequestProgID); 
    } else { 
     var progIDs = ["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 < progIDs.length; ++i) { 
      var progID = progIDs[i]; 
      try { 
       var x = new ActiveXObject(progID); 
       window.Anthem_XMLHttpRequestProgID = progID; 
       return x; 
      } catch (e) { 
      } 
     } 
    } 
} 
return null; 

}

這裏的Window.XMLHttpRequest值: enter image description here

,這裏是我創造了自己失敗的照片: enter image description here

更新: 剛剛發現它在兼容模式下工作!當我回到正常模式時,它再次運作! 順便說一句:文檔模式是怪癖模式(這是默認值)

+0

發佈您的信息? – Graham 2011-12-19 10:12:49

+0

我不能開始,但它永遠不會結束......很多的腳本在這個頁面......我的問題是你如何才能到達這種情況,你的瀏覽器不能新建一個XMLHttpRequest對象? – danfromisrael 2011-12-19 11:17:58

+0

'window.XmlHttpRequest'的值是什麼(如果你檢查它或打印到控制檯?) – hugomg 2011-12-19 14:00:34

回答

4

最近我遇到了這個問題,我發現如果我將創建XMLHttpRequest的代碼放入一個函數中,該函數在窗口加載後運行,它每次都能正常工作。試着將你的代碼在此:

window.onload = function() { 
    var lala = new XMLHttpRequest(); 
} 

或者,如果你使用jquery:

$(function() { 
    var lala = new XMLHttpRequest(); 
}); 
+0

hi ryan。它已經有一段時間了,我沒有那個代碼來測試你的解決方案是否工作。仍然,我想爲這個問題標記正確的答案。你可以批准這個代碼解決了這個問題嗎? – danfromisrael 2013-01-23 08:13:48

1

在IE(<第9節)window#XMLHttpRequestundefined,因爲這是一個特定瀏覽器的全球Object(即,對於符合的W3C瀏覽器如Mozilla的或基於Webkit的瀏覽器以及Opera)。

我真的不明白自己爲什麼

if(window.XMLHttpRequest) 

不計算爲false但也沒有什麼可以做在那裏。

什麼但是你能做的就是在那之前添加代碼叉檢查window#ActiveXObject(即互聯網瀏覽器)

if(!! window.ActiveXObject) { // same as typeof window.ActiveXObject !== "undefined" 
    /* use MSXML */ 
} 
else if(!! window.XMLHttpRequest) { 
    /* use XMLHttpRequest */ 
} 
else throw Error("Browser does not support XHR.") ; 

如果你不能修改源代碼,在這一點上,問題仍然存在,你可能想要更改框架。


編輯:我剛纔注意到你所說的在IE 9的問題顯示了這是IE 9支持XMLHttpRequestObject實際上應該不是這樣的。

+0

我不dont想要觸摸anthem的源代碼,因爲它假設工作正常,但我會如果我必須... 我編輯了這個問題,並添加了關於window.XMLHttpRequest的狀態和一些更多的調試信息的一些細節... – danfromisrael 2011-12-20 09:30:01

+0

@danfromisrael:這是一個空的「對象」?大!真奇怪。你正在Visual Studio中預覽運行它,對吧?也許這是真正的問題(VS可以使用IE <9)。無論如何,明顯的解決方法是使用其他框架的XHR(XMLHttpRequest)包裝器。 – FK82 2011-12-20 09:51:10

+0

vs2008 preview? 但我運行它通過IE9和火狐... 當我打運行和調試(綠色播放按鈕)它啓動本地服務器,我可以從任何瀏覽器加載站點只是通過複製和粘貼locahost地址。 .. VS2008能否影響ie9的方式? 我認爲IE9的定義可能會阻止JavaScript的能力,但所有的安全定義設置爲最低... – danfromisrael 2011-12-20 13:22:41

1

不管你信不信,IE9 DOES NOT實際上支持XMLHttpRequest(您可以在internet選項更改一些設置作爲最終用戶,但我相信這不會是你老闆可以接受的答案)。

IE9的,你要做的是:

var xmlhttp; 
if (ie9) 
{ 
    xmlhttp=new XDomainRequest(); 
} 
else 
{ 
    xmlhttp=new XMLHttpRequest(); 
} 

然後,在那裏你會通常適用(普通瀏覽器):

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
      // do your thing 
    } 
}; 

你必須要做到這一點,而不是(對ie9):

if (this.ie9) 
{ 
    xmlhttp.onload = function() 
    { 
     // do your ie9 thing 
    }; 
} 
相關問題