论坛首页 Web前端技术论坛

兼容IE与Firefox浏览器的跨域操作

浏览 6358 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-10  

在我们编写大型Web项目时,有时不可避免的会有跨域读取的操作,一般都会采用script标签的src方式,我也采用了这种方式,但一开始是利用给src赋值的方法实现跨域操作,但很奇怪的是在IE下运行一切正常,但在Firefox浏览器下却不工作,后来采用如下方式解决问题:

if(document.getElementById(this.scriptelementid)){
	var el=document.getElementById(this.scriptelementid);
	var p=el.parentNode;  
	p.removeChild(el);   
}
var head = document.getElementsByTagName("head").item(0);  
var script = document.createElement ("script");  
script.src = url;
script.id=this.scriptelementid;
head.appendChild(script);  
 
   发表时间:2008-10-10  
会不会是客户端缓存的原因导致的
0 请登录后投票
   发表时间:2008-10-10  
冯冀川 写道

会不会是客户端缓存的原因导致的

不是,如果用src动态赋值只在IE下起作用,在Firefox下只能调用一次,如果你的跨域操作有循环的话,根本不会重复被调用,这种动态添加DOM和删除DOM的方式能解决跨域问题,而且效果很好,还没深入研究是什么原因导致的
0 请登录后投票
   发表时间:2008-10-11  
试试setAttribute?
确实有点奇怪。实在不行,每次调用都创建新的script标签。
0 请登录后投票
   发表时间:2008-11-19  
kongshanxuelin 写道

在我们编写大型Web项目时,有时不可避免的会有跨域读取的操作,一般都会采用script标签的src方式,我也采用了这种方式,但一开始是利用给src赋值的方法实现跨域操作,但很奇怪的是在IE下运行一切正常,但在Firefox浏览器下却不工作,后来采用如下方式解决问题:

if(document.getElementById(this.scriptelementid)){
	var el=document.getElementById(this.scriptelementid);
	var p=el.parentNode;  
	p.removeChild(el);   
}
var head = document.getElementsByTagName("head").item(0);  
var script = document.createElement ("script");  
script.src = url;
script.id=this.scriptelementid;
head.appendChild(script);  
 

我就是用的你的这种方法,也是发现在ie中运行的很好,但是在firefox下面,没办法判断是否js加载完成,所以不能运行,在firefox下面怎么判断动态加载的js加载完成呢?

0 请登录后投票
   发表时间:2009-06-05  
firefox可以调用外部JS。应该是外部调用的JS在firefox下解释有错。
0 请登录后投票
   发表时间:2009-06-17  
在ff下动态创建的script有onload属性.而在ie下则需要判断它的readyState.  并不是没有办法监测它是否架载完成.
我写的一个函数,代码如下:

//跨域json {src:"",params:"k=1&m=2",cache[0:no,1:cache],fnback[function]}
function includeJS(url,param,cache,fnback){
    var me = arguments.callee;
    var src = url.indexOf("?")=="-1"?url+"?":url;
    var cache = ["","&nocache=" + new Date().getTime()][cache];
    src += param + cache;
    me.Script && me.Script.parentNode.removeChild(me.Script);
    me.Script  = document.createElement("script");
    me.Script.setAttribute("type","text/javascript");
    me.Script.src = src;
    document.getElementsByTagName("head")[0].appendChild(me.Script);
    me.Script.onload = me.Script.onreadystatechange = function(){
        if(me.Script.readyState){
            if(me.Script.readyState.match(/loaded|complete/i)) return fnback();
        }else{
            return fnback();
        }
    }
}
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics