解决 safari window.open 无法实现的问题
今天在做浏览器兼容问题是,发现safariwindow.open无法实现的问题,google了一下,找到了。解决方案!
转载自:http://blog.csdn.net/wgrzhuaq/article/details/7821725
先说下问题是什么吧:safari中没办法在回调函数里面执行window.open,原因是safari的安全机制将其阻挡了(具体的原因可能需要你自己深入研究)..
那么如果你有这样的需求(或者类似的),通过ajax发送请求到服务器端,等待请求响应成功之后,根据从服务器端响应得到的数据,打开一个窗口显示给用户,在safari上是没办法直接一个window.open搞定的(浏览器没问题,IE,firefox,chrome).
那么window.open在safari中只有当用户触发事件之后才能被调用成功的,怎么解决这个问题呢?很简单,绕过这个该死的安全机制,在你调用ajax请求之前,打开这个窗口,然后在回调函数里面修改新打开窗口的location,这样就解决了。这个解决方案是我前两天从国外一位兄台的博客上找到的,相信国内的某些兄弟可能会用到,所以在此发出来,希望能对你有所帮助。
简单示例代码如下(假设应用jquery):
pg.find('[name=gotoAccountSet]').unbind('click').click(function(){
varsel=pg.find('selectoption:selected');
varid=sel.attr("id");
varname=sel.html();
varwinRef=window.open("","_blank");//打开一个新的页面
App.post('accountSet/getServerName.do',{id:id},function(data){
varro=mac.eval(data);
if(ro.success){
functionloc(){
varll='http://'+ro.data.info+'.teenydata.com/'+name+'/index.jsp';
winRef.location=ll;//改变页面的location
}
setTimeout(loc(),800);//这个等待很重要,如果不等待的话将无法实现
}
})
});
如果实在需要弹出网页,可以用window.showModalDialog()
如果需要另起窗口打开用<ahref="地址"target="_blank"></a>也能打开新窗口。