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

时间:2017-12-07 23:02:54

标签: javascript jquery browser

我在客户网站上工作,在提交表单后通过在表单提交的新选项卡中打开PDF网址来下载PDF。但是在Chrome,Safari和FF中,他们都会阻止" popup"。我注意到一些文章讨论了阻止浏览器阻止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();

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

1 个答案:

答案 0 :(得分:1)

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

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

Content-Type: application/octet-stream

Content-Disposition: attachment

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

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

  

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

弹出窗口令人讨厌。有很多方法可以在不创建无用的弹出窗口的情况下下载文件。