用户反馈一个Silverlight应用在Safari下无法使用,启动这个应用的工作方式为ajax获取特定数据并在回调函数中根据返回的数据拼接url,最后调用window.open函数打开它。通过Web Inspector调试发现window.open函数返回undefined。查阅资料发现Safari由于安全机制只有用户触发代码中才会成功,对于在回调函数中使用window.open函数,比如setTimeout、ajax等的callback都会失败。
1 function btnOpen_click(sender, e) { 2 window.open(""); 3 }
1 function btnOpen_click(sender, e) { 2 $.get("", function (response) { 3 window.open(""); 4 }); 5 }
要绕过这个安全机制可以先打开一个空的窗口并在回调函数中设置它的location,参考如下:
1 function btnOpen_click(sender, e) { 2 var hwnd = window.open("", "_blank"); 3 4 $.get("", function (response) { 5 hwnd.location = ""; 6 }); 7 }