看到沒有,不分青紅皂白就去讀top物件,當網頁被嵌在不同Domain的Frame或IFrame時,不出問題才有鬼! 這也難怪之前在測試台時,網頁與入口網站在同一台主機,沒有跨Domain的問題,能無憂無慮地通過測試。
如此,ScriptManager會以WebAppPath/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.debug.js取代Embedded在DLL中的版本。下一步是修改程式,將case Sys.Browser.InternetExplorer:到case Sys.Browser.Safari:間的程式碼換成以下的寫法:
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;
修改完成,果然就沒有錯誤訊息了! Case Closed.