浏览 6358 次
锁定老帖子 主题:兼容IE与Firefox浏览器的跨域操作
精华帖 (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); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-10
会不会是客户端缓存的原因导致的
|
|
返回顶楼 | |
发表时间:2008-10-10
冯冀川 写道 会不会是客户端缓存的原因导致的 不是,如果用src动态赋值只在IE下起作用,在Firefox下只能调用一次,如果你的跨域操作有循环的话,根本不会重复被调用,这种动态添加DOM和删除DOM的方式能解决跨域问题,而且效果很好,还没深入研究是什么原因导致的 |
|
返回顶楼 | |
发表时间:2008-10-11
试试setAttribute?
确实有点奇怪。实在不行,每次调用都创建新的script标签。 |
|
返回顶楼 | |
发表时间: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加载完成呢? |
|
返回顶楼 | |
发表时间:2009-06-05
firefox可以调用外部JS。应该是外部调用的JS在firefox下解释有错。
|
|
返回顶楼 | |
发表时间: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(); } } } |
|
返回顶楼 | |