我使用时在服务器上创建了一个pdf:
function GetPdf(document) {
//Stores the data and creates the html,pdf file
$http.post('createpdf/', document).success(function(data){
console.log(data.filename);
window.open('download2/'+data.filename+".pdf", "_self");
});
我在谷歌浏览器中弹出阻止弹出的错误消息。 当我使用该网站的选项启用弹出窗口时,一切正常。有没有办法解决 ?因为这可能会让一些用户感到困惑。
但是当我使用时:
window.open('download2/'+data.filename+".pdf", "_self");
它会在没有警告的情况下打开页面,但主应用程序将替换为pdf,而这不是我想要的结果。
答案 0 :(得分:5)
浏览器对于何时允许JavaScript show a popup有严格的规定,但它们可归纳为"仅响应用户操作"。
接收对HTTP请求的响应不是用户操作,因此禁止弹出窗口。
这里的简单解决方案是不使用JavaScript 。 Ajax的目的是在不离开页面的情况下与服务器进行通信,但无论如何都要离开页面,因此使用Ajax确实没有任何意义。
只需使用常规表单提交。
<form method="post" action="createpdf/" target="_blank">
...然后让服务器端脚本重定向到创建的PDF的URL,而不是将URL作为JSON返回。
答案 1 :(得分:0)
弹出窗口阻止不是问题,而是保护用户免受popup-hell保护的本机浏览器功能。 我建议在modal popup而不是新的浏览器窗口中打开PDF。
使用一些jQuery代码很容易实现:找到文档here
答案 2 :(得分:-1)
我猜您正在使用外部JavaScript库,我在另一个项目中遇到了同样的问题,我使用target="_tab"
并且它有效,我在this question.找到了
这是Chrome在您使用库时处理来自JavaScript的弹出调用的方式,我使用Moment.js来触发类似事件并遇到同样的问题。
答案 3 :(得分:-1)
您始终可以使用替代路线,例如代替window.open功能。您可以使用window.location函数。 Windows.location.replace将在同一个选项卡中重定位。
<script type="text/javascript">
<!--loc can be any changed to your window-->
var loc = "https://google.com/";
window.
window.onclick = function() {
window.open(loc);
}
</script>
试试:) window.open被阻止,因为你正在执行window.open而没有单击功能。出于安全考虑,大多数Web浏览器都会阻止此功能。