前言
最近遇到 ASP.NET Ajax 的 web Form 系統使用 Chrome 時會出現以下的錯誤訊息,遺漏對 Sys.Application.notifyScriptLoaded() 的呼叫
Cannot read property '_notified' of null
解法
一開始看到 無法存取的路徑。
ScriptResource.axd… Uncaught Sys.ScriptLoadFailedException: Sys.ScriptLoadFailedException: 無法載入指令碼 ‘http://…/ScriptResource.axd?’。請檢查:
無法存取的路徑。
指令碼錯誤。(IE) 在進階設定下啟用 [每次出現 script 錯誤時皆顯示通知]。
遺漏對 Sys.Application.notifyScriptLoaded() 的呼叫。
at Function.Error$create [as create]
at Function.Sys$_ScriptLoader$_errorScriptLoadFailed
at Sys$WebForms$PageRequestManager.Sys$WebForms$PageRequestManager$_scriptIncludesLoadComplete
at Sys$WebForms$PageRequestManager.Sys$WebForms$PageRequestManager$_scriptIncludesLoadFailed
以為是 js 檔案最後沒有加入 if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();
但查看了一下程式,最後面是有加入 if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();
這段程式碼。
而最下面還有段錯誤是 Uncaught TypeError: Cannot read property of null (reading '_notified')
,
查看 Cannot read property ‘_notified’ of null with ASP.NET Ajax with WebKit based browsers ,
是因為 Sys.Browser.name 的值設定不對,所導致的錯誤。
在 Chrome 上測試 navigator.userAgent 的值為 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
,Sys.Browser.name 的值為 Safari
,
Sys.Browser.name 的值應該要為 WebKit
Ajax 運作才會正常。
所以加入以下的 JS 來判斷 navigator.userAgent ,將 Sys.Browser.name 改成正確的 WebKit
1 | Sys.Browser.WebKit = {}; |
參考資源
Cannot read property ‘_notified’ of null with ASP.NET Ajax with WebKit based browsers
error in MicrosoftAjax.js: Cannot read property ‘_notified’ of null
Resolve Error - cannot Read Property ‘_notified’ of Null