关键代码就一句:
- win.postMessage(document.getElementById("message").value,"*");
postMessage是通信对象的一个方法,所以向iframe通信,就是iframe对象调用postMessage方法。postMessage有两个参数,缺一不可。第一个参数是要传递的数据,第二个参数是允许通信的域,“*”代表不对访问的域进行判断,可理解为允许所有域的通信。
然后是iframe.html里侦听接收数据的代码:
- var parentwin = window.parent;window.onmessage=function(e){ document.getElementById("test").innerHTML = e.origin + "say:" + e.data;
- parentwin.postMessage('HI!你给我发了"<span>'+e.data+'"</span>。',"*");};
很简单,相信一看就懂了。e.data包含传送过来的数据,e.origin指代源域。
然后iframe.html也给test.html发送回应的数据,test.html接收数据。代码雷同,就不贴代码了。
2. Ajax跨域请求
基于以上的跨域通信,只要将Ajax代码放在iframe.html里的onmessage处理函数里头,将test.html用postMessage传过来的数据作为参数发送请求,再将返回的数据用postMessage传给test.html。这样就实现了跨域的Ajax请求。其实是很简单的东西。
贴个示例代码吧,但跟以上的代码无关。
- (function(){ //获取跨域数据 window.onmessage = function(e){
- var url = "http://yangzebo.com/demo/noforget/test.php?msg=" + e.data;
- //Ajax var xhr = getXHR();
- if(xhr){
- xhr.open("GET",url,true);
- xhr.onreadystatechange = changeHandle;
- xhr.send(null); }else{
- alert("不支持Ajax"); }
- function changeHandle(){//返回处理
- if(xhr.readyState == 4){
相关文章
大家在看
-

福昕阅读器如何复制文字
2023-03-02
0万阅读
-

Dubbo 系列JDK SPI 原理解析
2023-02-24
0万阅读
-

欲为王者至尊 888元志美4倍速DVD刻录机评测
2023-02-22
6万阅读
-

拼音标注能手--中华拼读王
2023-02-17
10万阅读
-

360随身WiFi怎么设置隐藏信号 360随身wifi隐藏信号
2023-02-12
9万阅读
-

怎么用酷盘分享文件给好友
2023-02-11
12万阅读
-

企业应如何防范内存抓取恶意软件
2023-02-10
6万阅读
-

如何知道电脑是否含有病毒
2023-02-09
8万阅读
-

美图秀秀让你的国庆旅游照片更出彩
2023-01-16
9万阅读
-

u启动怎么用 U启动使用教程
2023-01-14
4万阅读
-

福昕阅读器如何复制文字
2023-03-02
0万阅读
-

Dubbo 系列JDK SPI 原理解析
2023-02-24
0万阅读
-

欲为王者至尊 888元志美4倍速DVD刻录机评测
2023-02-22
6万阅读
-

拼音标注能手--中华拼读王
2023-02-17
10万阅读
-

360随身WiFi怎么设置隐藏信号 360随身wifi隐藏信号
2023-02-12
9万阅读
-

怎么用酷盘分享文件给好友
2023-02-11
12万阅读
-

企业应如何防范内存抓取恶意软件
2023-02-10
6万阅读
-

如何知道电脑是否含有病毒
2023-02-09
8万阅读
-

美图秀秀让你的国庆旅游照片更出彩
2023-01-16
9万阅读
-

u启动怎么用 U启动使用教程
2023-01-14
4万阅读
