文章編號: 936993 - 上次校閱: 2007年6月1日 - 版次: 1.2

當您存取執行可 AJAX 1.0 啟用 ASP.NET 2.0 程式的網頁時,出現錯誤訊息: 「 發生的執行時期錯誤 」

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

當您存取執行可 AJAX 1.0 啟用 Microsoft ASP.NET 2.0 程式的網頁時,您會收到下列的錯誤訊息:
發生執行階段錯誤。
您想要偵錯嗎?
線條: 5
錯誤: 存取被拒
如果下列情況成立,就會發生這個錯誤訊息:
  • 來自不同網域指向另一個網頁的網頁中,您可以使用 <iframe>項目。
  • 來自不同網域的網頁使用 ASP.NET AJAX 伺服器控制項。
  • <iframe>項目會觸發非同步回傳作業中執行的動作。
  • 在 Microsoft Internet Explorer 中您按一下以在 [網際網路選項] 中選取下列核取方塊在 [瀏覽] 下方之 [進階] 索引標籤上:
    • 停用指令碼偵錯 (Internet Explorer)
    • 停用指令碼偵錯 (其他)

發生的原因

Web 網頁有內含 <iframe>項目與 <iframe>項目點是在不同網域中的網頁,就會發生這個問題。當它嘗試判斷內容的位移,AJAX 1.0 啟用 ASP.NET 指令碼將會失敗。

解決方案

如果要解決這個問題,使用下列方法之一。

方法 1

請確定 Web 網頁,包含 <iframe>項目和 <iframe>項目點是同一網域中的網頁。

方法 2

更新 JavaScript 檔案以避免錯誤訊息。使用存在於 AJAX 程式庫套件,而非資源為基礎的檔案存在於 AJAX 延伸模組封裝外部的指令碼檔案。要這麼做,請您執行下列步驟。

步驟 1: 設定 Web 網頁,以使用指令碼檔案,而不是資源檔

  1. 下載,然後從 「 Microsoft 下載中心 」 解壓縮 AJAX 程式庫。

    下列檔案是可以從 Microsoft 下載中心 」 下載:

    摺疊此圖像展開此圖像
    Download
    Download the Microsoft AJAX Library package now. (http://ajax.asp.net/downloads/library/default.aspx?tabid=47&subtabid=471)

    如需有關如何下載 Microsoft 支援檔案的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
    119591? (http://support.microsoft.com/kb/119591/ ) 如何從線上服務取得 Microsoft 的支援檔案
    Microsoft 已掃描這個檔案有無病毒。Microsoft 使用已張貼檔案的日期中的 [可用的最新病毒偵測軟體。檔案儲存在安全性強化的伺服器上,協助防止未經授權的任何變更的檔案。
  2. 在網頁上包含 <iframe>項目,指定的值,ScriptPath <scriptmanager>項目中的屬性。 下列程式碼會尋找指令碼在應用程式根目錄中命名的指令碼的資料夾中。
    <asp:ScriptManager ID="ScriptManager1" runat="server" ScriptPath="~/Scripts" />
  3. AJAX 程式庫中的 [System.Web.Extensions 資料夾將複製到指令碼] 資料夾中。
  4. 存取 ASPX 網頁,以確認指令碼檔案從 [指令碼] 資料夾呼叫。如果要執行這項操作,按一下 [Internet Explorer 中的 [檢視] 功能表上的 [來源]。找不到下列的兩個指令碼標記
    <script src="Scripts/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="Scripts/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxWebForms.js" type="text/javascript"></script>
    

步驟 2: 修改 MicrosoftAjax.debug.js 檔案以避免錯誤訊息

當 <compilation>項目中的 [偵錯] 屬性設定為 True 時在 Web.config 檔中,您必須使用 MicrosoftAjax.debug.js 檔案。MicrosoftAjax.debug.js 檔案包含分行符號。若要修改 MicrosoftAjax.debug.js 檔案,請依照下列步驟執行:
  1. 開啟 MicrosoftAjax.debug.js 檔案。這個檔案位於下列資料夾中:
    Application Root Directory/Scripts/System.Web.Extensions/1.0.61025.0
  2. 找出下列兩行程式碼。(有可能是程式碼這些兩行之間)。
    switch(Sys.Browser.agent) {
        case Sys.Browser.InternetExplorer:
    

    case Sys.Browser.Safari:
    
  3. 貼上下列程式碼步驟 2b 中所列的線條兩個程式碼之間。如果程式碼存在兩行之間,取代程式碼。

    新的程式碼
     Sys.UI.DomElement.getLocation = function(element) {
                if (element.self || element.nodeType === 9) return new Sys.UI.Point(0,0);
    
                var clientRect = element.getBoundingClientRect();
                if (!clientRect) {
                    return new Sys.UI.Point(0,0);
                }
    
                var ownerDocument = element.document.documentElement;
    
                var offsetX = clientRect.left - 2 + ownerDocument.scrollLeft,
                    offsetY = clientRect.top - 2 + ownerDocument.scrollTop;
                
                try {
                    var f = element.ownerDocument.parentWindow.frameElement || null;
                    if (f) {
                        var offset = 2 - (f.frameBorder || 1) * 2;
                        offsetX += offset;
                        offsetY += offset;
                    }
                }
                catch(ex) {
                }    
                
                return new Sys.UI.Point(offsetX, offsetY);
            }
            break;
    
  4. 儲存 MicrosoftAjax.debug.js 檔案。
  5. 在 ASP.NET] 程式中開啟 Web.config 檔案,然後將 偵錯] 屬性設為 True <compilation>項目中。
  6. 儲存 Web 網頁。

步驟 3: 修改 MicrosoftAjax.js 檔案以避免錯誤訊息

MicrosoftAjax.js 檔案是發行版本的 MicrosoftAjax.debug.js 檔案。[MicrosoftAjax.js 不包含換行。若要修改 MicrosoftAjax.js 檔案,請依照下列步驟執行:
  1. 在 [指令碼] 資料夾中開啟 MicrosoftAjax.js 檔案。
  2. 找出下列兩行程式碼。(有可能是程式碼這些兩行之間)。
    switch(Sys.Browser.agent){case Sys.Browser.InternetExplorer:
    

    case Sys.Browser.Safari:
  3. 貼上下列程式碼會列在步驟 3b 的線條兩個程式碼之間。如果程式碼存在兩行之間,取代程式碼。

    新的程式碼
    Sys.UI.DomElement.getLocation=function(a){if(a.self||a.nodeType===9) return new Sys.UI.Point(0,0);
    var b=a.getBoundingClientRect();
    if(!b) return new Sys.UI.Point(0,0);
    var c=a.document.documentElement,d=b.left-2+c.scrollLeft,e=b.top-2+c.scrollTop;
    try{var g=a.ownerDocument.parentWindow.frameElement||null;
    if(g){var f=2-(g.frameBorder||1)*2;
    d+=f;e+=f}}catch(h){}return new Sys.UI.Point(d,e)};
    break;
  4. 儲存 MicrosoftAjax.js 檔案。
  5. 在 ASP.NET] 程式中開啟 Web.config 檔案,然後將 偵錯] 屬性設為 True <compilation>項目中。
  6. 儲存 Web 網頁。

狀況說明

這種行為是經過設計規劃的。

其他相關資訊

如需有關 <iframe>元素的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn2.microsoft.com/en-us/library/ms535258.aspx (http://msdn2.microsoft.com/en-us/library/ms535258.aspx)
如需有關 ASP.NET AJAX 的詳細資訊,請造訪下列 Microsoft 網站]:
http://ajax.asp.net/about/default.aspx?tabid=47 (http://ajax.asp.net/about/default.aspx?tabid=47)

這篇文章中的資訊適用於:
  • Microsoft ASP.NET 2.0
關鍵字:?
kbmt kberrmsg kbwebbrowser kbfix kbasp kbtshoot kbprb KB936993 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:936993? (http://support.microsoft.com/kb/936993/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。