繁体   English   中英

我们可以不再使用window.open()

[英]Can we no longer use window.open()

在提交表单后,我正在一个客户站点上下载PDF,方法是在表单提交的新标签页中打开PDF网址。 但是在Chrome,Safari和FF中,它们都阻止了“弹出窗口”。 我注意到一些文章讨论了如何防止浏览器阻止window.open()。 它们通常与ajax有关,但我没有使用ajax。 其他文章讨论window.open()仅在click事件中如何工作。 甚至那对我也不起作用。

这没有多大意义,但在我的示例中,我尝试触发点击并

<script>
    jQuery( document ).ready(function() {
        jQuery(".gform_confirmation_message a").on("click", function(e){
            e.preventDefault();
            var newWin = window.open("", "_blank");
            newWin.location = jQuery(".gform_confirmation_message a").attr("href");
        });

        jQuery(".gform_confirmation_message a").trigger("click");
    });
</script>

即使我在jquery外面放了一条简单的线,也行不通并被阻塞了。

var newWin = window.open("", "_blank");

同样,它们中的任何一个都绝对不起作用。 它甚至不弹出阻止弹出窗口。

jQuery(".gform_confirmation_message a").trigger("click");
OR
jQuery(".gform_confirmation_message a").click();

我知道浏览器正在打击垃圾邮件/广告安全性,但这很荒谬。

弹出窗口仍然可能。 它们只需要由用户操作触发即可。 创建假click事件不被视为用户操作。

开始下载的一种方法是,将页面重定向到具有正确内容类型集的PDF,以便立即下载:

Content-Type: application/octet-stream

要么

Content-Disposition: attachment

使用HTML5,您还可以通过创建临时<a>标签并将其download属性设置为文件url来开始下载。 虚拟点击事件仍然有效。

 var textFile = new Blob(["hello world"], {type: "text/plain"}); var blobUrl = URL.createObjectURL(textFile); var a = document.createElement("a"); a.href = blobUrl; a.download = "myTextFile.txt"; a.click(); // start the download 

我知道浏览器正在打击垃圾邮件/广告安全性,但这很荒谬。

弹出窗口很烦人。 有很多方法可以下载文件而无需创建无用的弹出窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM