解决JS的跨域问题–动态Script标签(Dynamic Script Tag)  

这种方法也叫"动态脚本注入".这种技术克服了XMLHttpRequest的最大限制,也就是跨域请求数据.直接用JavaScript创建一个新的脚本标签,然后设置它的src属性为不同域的URL.
例如www.a.com/a.html中的script

var x = document.createElement('script');
x.src = 'http://www.b.com/b.js';
x.setAttribute("type", "text/javascript");
document.body.appendChild(x);

通过动态标签注入的必须是可执行的JavaScript代码,因此无论是你的数据格式什么都必须封装在一个回调函数中.一个回调函数如下:

www.a.com/a.html中的script

functiondynCallback(data){
  //处理数据, 此处简单示意一下
  alert(data.content);
} 

在这个例子中,www.b.com/b.js需要将数据封装在上面这个dynCallback函数中,如下:

dynCallback({content:'Hello World'}) 

image

我们看到了让人开心的结果,Hello World~

不过动态脚本注入还是存在不少问题的,下面我们拿它和XMLHttpRequest来对比一下:

XmlHttpRequestDynamic Script Tag
跨浏览器兼容NoYes
跨域限制YesNo
接收HTTP状态YesNo (除了200)
支持Get、PostYesNo (GET only)
发送、接收HTTP头YesNo
接收XMLYesYes
接收JSONYesYes
支持同步、异步YesNo (只能异步) 

可以看出,动态脚本注入还是有不少限制,只能使用Get,不能像XHR一样判断Http状态等.而且使用动态脚本注入的时候必须注意安全问题.因为JavaScript没有任何权限与访问控制的概念,通过动态脚本注入的代码可以完全控制整个页面,所以引入外部来源的代码必须多加小心.

请订阅本站 RSS feed 订阅到信箱 ,欢迎 Donate 或者 上面的广告内容 支持三十岁

本文链接:解决JS的跨域问题--动态Script标签(Dynamic Script Tag)

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:三十岁,谢谢!^^


分享到:          
评论关闭