跨域将.net 工程嵌入别的系统页面中发生的js、ajax的拒绝访问的错误
来源:互联网 发布:图书馆软件 编辑:程序博客网 时间:2024/05/09 19:51
前一段时间有人问我一个Javascript. Error,他将.net adf开发的系统放在一个大系统的首页的一个Frame里面,更要命的是首页与新网页位于不同的server上,于是只要在新网页的任何地方按下鼠标左键,都会弹出“拒绝访问”的js错误。追了一下发现问题出现在
switch(Sys.Browser.agent) {
case Sys.Browser.InternetExplorer:
Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element)
var ffsetL = w.screenLeft - top.screenLeft - top.document.documentElement.scrollLeft + 2;
,起初我们也不知道到底这里出了什么问题,全部装在一台上么是可以的,如果两个系统部署在不同的server上么就报这个错,关键还是用fire fox也是可以的,而用IE就出错。到底什么原因,想破头啊!弄到半夜还么有进展,后来找到一个台湾人写的一篇文章,才算弄明白。
大家看代码,js程序中它不管三七二十一就去读top物件,当网页被嵌在不同的Domain的Frame或Iframe时,肯定就要出错了。这就能解释网页入口网站在同一台主机,没有有跨Domain的问题的时候,能够幸免,从Sys.Browser.InternetExplorer我们也可以理解为什么用fire fox可以正常使用。还好,不仅网上有人指出了这个bug,也给出了解决方案(还要感谢网上达人奉献精神)。下面贴出解决方案。
其实最主要的关键是将有问题的MicrosoftAjax.js换掉,改成我们自己修改的版本。AJAX的js都已经是用Embedded Resource的方式藏在DLL中,而用ScriptResource.axd将他取回。所幸,ScriptManager提供了方法可以改用静态档案,方法是:先去下载Microsoft AJAX Library ,将解压縮在你的Web Application目录后,接着修改ScriptManager的宣告:
<asp:ScriptManager ID="ScriptManager1" runat="server"><Scripts>
<asp:ScriptReference
Name="MicrosoftAjax.js" ScriptMode="Auto"
Path="~/[WebAppPath]/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.js"/>
</Scripts></asp:ScriptManager>
如此,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 wnerDocument = element.document.documentElement;
var ffsetX = clientRect.left - 2 + ownerDocument.scrollLeft,
ffsetY = clientRect.top - 2 + ownerDocument.scrollTop;
try {
var f = element.ownerDocument.parentWindow.frameElement || null;
if (f) {
var ffset = 2 - (f.frameBorder || 1) * 2;
offsetX += offset;
offsetY += offset;
}
}
catch(ex) {
}
return new Sys.UI.Point(offsetX, offsetY);
}
break;
修改完成后,地图就可以正常操作了。
真的要感谢前人的分享,期望ASP.NET AJAX以后的版本或Service Pack能修正这一bug。
- 跨域将.net 工程嵌入别的系统页面中发生的js、ajax的拒绝访问的错误
- net start mysql启动mysql,提示发生系统错误 拒绝访问的解决方法
- 发生系统错误 拒绝访问
- JS的拒绝访问的错误
- dos启动mysql时发生系统错误5拒绝访问的问题
- net start mongodb 提示:发生系统错误 5,拒绝访问。
- 解决:发生系统错误 5;拒绝访问!
- 发生系统错误 5。 拒绝访问。
- cmd发生系统错误5 拒绝访问
- cmd发生系统错误 5。 拒绝访问。
- 启动MySQL错误(net start mysql 发生系统错误 5。 拒绝访问。)
- iframe嵌入的页面引用jQuery1.10.1,IE9打开时提示拒绝访问
- 对路径" "的访问被拒绝XP中IIS下asp.net程序错误提示解决方案
- 安全信息应用到以下对象时发生错误文件夹拒绝访问的解决
- Mysql net start mysql启动,提示发生系统错误 5 拒绝访问 解决之道
- net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法
- DOS 下net start oracleserviceorcl 发生系统错误 5。 拒绝访问。
- Mysql net start mysql启动,提示发生系统错误 5 拒绝访问 解决之道
- 深入了解VC++编译器
- 令人迷惑的String类
- objective-c 使用文件(二)
- note110715_1
- 我们需要怎样的OLAP?
- 跨域将.net 工程嵌入别的系统页面中发生的js、ajax的拒绝访问的错误
- 使用JDBC-ODBC桥接的方式连接数据库
- Android中Density和Pixel的关系对界面显示的影响
- vc对话框编辑界面左下角有个小按钮,可以直接测试更改的效果
- Android所有可用的资源列表
- volatile语义及线程安全singleton模式探讨
- Linux常用命令
- 传智播客 自己保留着
- oracle:查询用户权限常用语句