2014-02-20 55 views
3

這一直使我瘋狂。我正在嘗試將一些遺留應用程序遷移到新服務器,並且在整個代碼中都存在很多document.all問題。在舊服務器上工作的JavaScript代碼,但不是新的

在你說出來之前,我知道。請勿使用document.all。它在那裏,我無能爲力......這個特殊的問題在程序集中有JavaScript,我沒有源代碼,也沒有權限重新開發。

我的主要困惑是當我在與我的遷移版本相同的瀏覽器中測試時,當前版本的應用程序正在工作。這是一個直接的複製和粘貼作業,遷移過程中沒有任何代碼改變,但是當我在新服務器上運行應用程序時,總是返回空值。

IIS或更新的.NET框架以某種方式處理客戶端腳本的方式不同嗎?

我從.NET 2.0託管的Windows Server 2005的到來與IIS 6,並且要.NET 4.0託管在Windows Server 2012上的IIS 8

我在尋找任何想法,爲什麼這些會在同一瀏覽器中測試時被不同地表現

UPDATE: 用戶控制由document.all目標是越來越編碼被搞亂了控制的ID,即,應當什麼'elementId'被輸出爲'elementId'

a中的代碼組件正在使用包含單引號的Attributes.Add。我發現了一些建議的來源一個新的類,如:

public class HtmlAttributeEncodingNot : System.Web.Util.HttpEncoder 
{ 
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output) 
    { 
     output.Write(value); 
    } 
} 

添加這將使編碼通過在web.config使用<httpRuntime encoderType="HtmlAttributeEncodingNot"/>被關閉,但我不能夠添加新的類這個項目

+0

檢查如何在頁面頂部聲明「DOCTYPE」 – Aristos

+0

它設置爲「<!DOCTYPE HTML PUBLIC」 - // W3C // DTD HTML 4.0 Transitional // EN「>' – McFixit

+0

可能這有助於: http://stackoverflow.com/questions/6488579/firefox-error-document-all-is-undefined-webuivalidation-js –

回答

0

這聽起來像你的項目是結束它的生活,你只是想呼吸新的生活。我認爲document.all是在IE11之後完成的,是不是 - 所以時鐘在滴答滴答。

我建議編寫一些Javascript來迭代DOM並查找任何編碼的ID - 然後將其更改回.NET 2窗體。在頁面底部運行該JS(而不是onload),並希望在「更正」id之前,沒有人試圖訪問document.all。

+0

我同意。儘管我已經提出了一些關於hacky修復的想法,但這並不是我喜歡做的事情。儘管document.all沒有成爲根本問題,但在我們的用戶採用IE 10和11時,應用程序再次中斷只是時間問題。我將嘗試一個腳本來解碼實體並向用戶提供一些選項誰可以對此做出實際決定,謝謝。 – McFixit

+0

很高興幫助 - 如果你能接受我的答案,我將能夠養活我的家人再一個月 - 謝謝。 –

1

我打算保留接受的答案,但添加此答案以防其他人在將來遇到此問題。

我的情況發生了變化,我可以在項目中添加一個類。在我的問題的類:

public class HtmlAttributeEncodingNot : System.Web.Util.HttpEncoder 
{ 
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output) 
    { 
     output.Write(value); 
    } 
} 

使用的類在web.config中的編碼一起: <httpRuntime encoderType="HtmlAttributeEncodingNot"/>

是足以與單引號Attributes.Add處理被編碼爲$#39;

此外,使用舊的JavaScript需要注意的一點是.net呈現控件的ClientID。使用上面的代碼以及<xhtmlConformance mode="Legacy"/>clientIDMode="AutoID"的組合,我能夠將html與2.0的相同,並且暫時解決我的問題。

相關問題