最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript跨域问题代码总结

来源:懂视网 责编:小采 时间:2020-11-27 20:24:30
文档

JavaScript跨域问题代码总结

JavaScript跨域问题代码总结:什么是跨域?概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/script/
推荐度:
导读JavaScript跨域问题代码总结:什么是跨域?概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/script/

通过修改document.domain来跨子域

浏览器都有一个同源策略,其限制之一就是第一种方法中我们说的不能通过ajax的方法去请求不同源中的文档。 它的第二个限制是浏览器中不同域的框架之间是不能进行js的交互操作的。

不同的框架之间是可以获取window对象的,但却无法获取相应的属性和方法。比如,有一个页面,它的地址是http://www.gxlcms.com/ , 在这个页面里面有一个iframe,它的src是http://www.gxlcms.com/, 很显然,这个页面与它里面的iframe框架是不同域的,所以我们是无法通过在页面中书写js代码来获取iframe中的东西的:

<script type="text/javascript">
 function test(){
 var iframe = document.getElementById('?ifame');
 var win = document.contentWindow;//可以获取到iframe里的window对象,但该window对象的属性和方法几乎是不可用的
 var doc = win.document;//这里获取不到iframe里的document对象
 var name = win.name;//这里同样获取不到window对象的name属性
 }
</script>
<iframe id = "iframe" src="http://example.com/b.html" onload = "test()"></iframe>

这个时候,document.domain就可以派上用场了,我们只要把http://www.gxlcms.com/http://www.gxlcms.com/这两个页面的document.domain都设成相同的域名就可以了。但要注意的是,document.domain的设置是有限制的,我们只能把document.domain设置成自身或更高一级的父域,且主域必须相同。

1.在页面 http://www.gxlcms.com/ 中设置document.domain:

<iframe id = "iframe" src="http://example.com/b.html" onload = "test()"></iframe>
<script type="text/javascript">
 document.domain = 'example.com';//设置成主域
 function test(){
 alert(document.getElementById('?iframe').contentWindow);//contentWindow 可取得子窗口的 window 对象
 }
</script>

2.在页面 http://www.gxlcms.com/ 中也设置document.domain:

<script type="text/javascript">
 document.domain = 'example.com';//在iframe载入这个页面也设置document.domain,使之与主页面的document.domain相同
</script>

修改document.domain的方法只适用于不同子域的框架间的交互。

使用window.name来进行跨域

window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的

使用HTML5的window.postMessage方法跨域

window.postMessage(message,targetOrigin) 方法是html5新引进的特性,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同源或不同源,目前IE8+、FireFox、Chrome、Opera等浏览器都已经支持window.postMessage方法。

文档

JavaScript跨域问题代码总结

JavaScript跨域问题代码总结:什么是跨域?概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/script/
推荐度:
标签: 访问 js 代码
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top