众所周知浏览器为了安全起见限制了跨域访问,即便是利用iframe也不能随便访问;但有时候我们需要跨域来传递一些信息或打开新的页面,怎么办呢?
好在限制Html5新增了postMessage方法,本来postMessage是windows应用中线程间消息通知方法;现在Html5在浏览器中来实现窗口间消息传递。
简单两步只需要在消息接收页面中监听事件即可。
1、消息发送页面:
top.postMessage(openUrl,url);
2、消息接收页面:
window.addEventListener("message", eventHandler, false);
function eventHandler(eventHandler){
// e.data =>发送页的openUrl
window.open(e.data);
}
但往往事情没有这么简单,发现根本没有打开新页面; 如果是传递一般信息上两步即可,但打开新的页面会被浏览器和谐掉。
Chromely中提供了RegisterUrlScheme方法,该方法是注册URL地址,此方法只有一个参数。
RegisterUrlScheme(new UrlScheme(urlString,true));
UrlScheme是RegisterUrlScheme的的必要参数,UrlScheme的两个参数url,isExternal;isExternal标注是否外部地址。
注册了外部地址后 window.open就可以打开非本域的URL地址了。
