用户在打了IE的最新补丁后,IE默认配置下,使用 XMLHttp 将无法跨站点访问,比如在 http://community.csdn.net/ 的页面就无法访问 http://message.csdn.net/ 的页面。会报如下错误:
---------------------------
错误
---------------------------
出现了运行时间错误。
是否要进行调试?
行: 49
错误: 拒绝访问。
---------------------------
是(Y) 否(N)
---------------------------
解决方法之一:
原理,使用下面的方式调用脚本,是可以跨网站的:
<script id=message language=javascript src="******************"></script>
于是乎,我们可以用下面的代码方式实现跨网站的脚本调用。进而变通的实现 XMLHttp 所无法跨网站的调用。
var Url = "http://message.csdn.net/********":
var ScriptName = "CheckUserHasNewMessage";
var head= document.getElementsByTagName("head").item(0);
var old = document.getElementById(ScriptName);
if (old) head.removeChild(old);
var script = document.createElement("SCRIPT");
script.src = Url;
script.defer = true;
script.type = "text/javascript";
script.id = ScriptName;
head.appendChild(script);
这个脚本要求被调用方,返回的是 JS 脚本。你可以在调用方事先写一些函数,然后被调用返回这些函数的调用。
以上方法在最前版本的 IE、FireFox 默认设置下均没问题。。
打印 | 张贴于 2005-09-21 12:38:00 | Tag:.net 编程心得 技术随笔 网站开发管理相关内容
留言反馈
我就在水源灌了几桶水就被封了帐号,人家灌几百桶的又没事,郁闷啊!
script.src = Url;
script.defer = true;
script.type = "text/javascript";
script.id = ScriptName;
head.appendChild(script);
如果要加入对方的脚本,不需要这么复杂的代码,直接eval('对方的数据')就行了。
^_^
xmlhttp因为有比跨域js严格得多的同源请求限制所以目前是没有真正通用适用并且好用的解决办法的,只能调用方在自己的同域服务器上放一个xmlhttp-proxy cgi来做周转。
我倒是试验出一个结合iframe和xmlhttp突破ie6sp1 xmlhttp request跨域限制的办法,可惜带一点恶意脚本性质,而且mozilla/opera上都用不了,估计ie7上也够呛能用,没啥实际意义。