iframe session实现跨域,iframe跨域调用js
通常,对于具有两个不同页面的脚本,只有当执行它们的页面位于相同的协议(通常是https)、端口号(443是https的默认值)和主机时,这两个脚本才能相互通信。但是在实际的项目开发过程中,iframe经常被用来在一个父页面中嵌入另一个子页面,或者在一个父页面中弹出另一个页面。由于同源策略的限制,父页面和子页面之间的脚本无法通信,而采用postMessage方法实现父页面和子页面之间的跨域信息传递。
语法:
other window . postmessage(message,targetOrigin,[transfer]);OtherWindow:对其他页面的引用,例如,iframe的contentWindow属性,或通过执行Window.open返回的window对象
消息:要传递到另一个页面的数据(数据对象可以安全地传递到目标窗口,没有限制,没有自序列化,因为采用了结构化克隆算法)。
Targetorigin:通过windows的origin属性指定哪些窗口可以接收消息事件,其值可以是字符串 * (表示无限制)或Url。只有当目标窗口的协议、主机地址、端口号和targetOrigin完全匹配时,目标窗口才会收到报文信息。为了防止信息泄露,通常会指定一个特定的url。
Transfer:可选参数。
用法:
1.父页面:(网址为http://www.b.com/main.html):
!doctype HTML HTML lang= en headmethacharaset= UTF-8 title parent page/title/head body iframe ID= child src= 3358 www.a.com/iframepage.html/iframescriptwindow . onload=function(){ document . getelementbyid( child )。contentwindow.postmessage(主页面传递的消息, http://www . a . com/iframe page . html )} window . addevent listener( message ,Function(event){ //父级得到消息if(event . origin== http://www . a . com ){//可以在这里做一些逻辑运算}},false)/script/body/html 2 . subpage(URL为http://www.a.com/iframepage.html)
!doctype HTML HTML lang= en headmethacharaset= utf-8 title subpage/title/head body div这里是subpage/div script window . addevent listener( message ,Function(event){ if(event . origin== 3358 www . b . com ){//你可以在这里做一些操作。top.postMessage(子页面从父页面接收消息, http://www . b . com/main . html )//)//子页面将消息传递给父页面}。当调用/script/body/htmlpostMessage方法时,将在执行所有页面脚本后向目标窗口发送MessageEvent消息。MessageEvent消息有四个需要注意的属性:
类型:表示消息的类型
Data:是postMessage的第一个参数。
Origin:表示调用postMessage方法的窗口的来源。
Source:记录调用postMessage方法的窗口对象
特别注意:
1.一定要等到A页面中嵌入的B页面加载完毕后,再进行postMessage跨域通信。
2.一定要判断原点,去掉不在我们目标窗口的原点,防止其他原点的攻击。
这就是本文的全部内容。希望对大家的学习和支持有帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。