在 Safari 的新标签页中打开 PDF

Posted

技术标签:

【中文标题】在 Safari 的新标签页中打开 PDF【英文标题】:Open PDF in a new Tab in Safari 【发布时间】:2016-10-21 16:34:29 【问题描述】:

帮帮我,我急需帮助。现在讨论真正的问题。

我一直在尝试让我的 pdf 在 Safari 的新标签页中打开,但直到现在我只面临失望。我正在使用 jsPDF 生成我的 PDF,之前我使用的是

doc.save(pdfName+".pdf")

执行相同操作的方法,因为在最新的 safari 版本“9.1.1(10601.6.17)”中它坏了。我仍然可以使用 jsPDF 的内置选项生成 pdf:

pdf.output('dataurl');

但是,它倾向于在同一个选项卡中打开 PDF,这种行为是非常不可取的。我尝试了网上可用的各种解决方案来解决这个问题,但都没有奏效。我尝试过的一些解决方案是:

    使用 window.open(),不起作用。 使用 location.href,不起作用。 使用 doc.output('save', 'filename.pdf'), doc.output('datauri'), doc.output('dataurlnewwindow'),没有任何效果。

    还尝试通过创建一个锚标记并将其目标设置为“_blank”然后使用 eventDispatcher 来刺激鼠标单击来进行假点击,但它也不起作用。像这样:

    var a = window.document.createElement("a");
    a.target = '_blank';
    a.href = 'http://www.google.com';
    
    var e = window.document.createEvent("MouseEvents");
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    a.dispatchEvent(e);
    

对我应该做什么有什么建议吗?我希望我的 pdf 在新选项卡中打开,而不是在与我的应用程序相同的选项卡中。

P.S : 我在上面为 Safari 尝试的每个解决方案在 Chrome 和 Mozilla Firefox 中都可以完美运行,我只是无法弄清楚与 Safari 有什么关系。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您可以尝试blob 输出。然后为此生成一个 Data URI,并在新窗口中打开它:

var blob = pdf.output("blob");
window.open(URL.createObjectURL(blob));

【讨论】:

仍然,在同一个选项卡中打开 pdf ; _ ; 这很奇怪.. 如果您尝试打开任何其他 URL,它仍然在同一个选项卡中打开吗?无论如何,也许使用第二个参数可能是解决方案:window.open(URL.createObjectURL(blob), '_blank'); 没用,不是粗鲁,而是浏览了 Apple 的文档,发现我们的“标准的 window.open() javascript 方法不能用于从全局 html 文件或扩展栏”developer.apple.com/library/safari/documentation/Tools/… 是的,对不起,现在我知道真正的问题是什么了.. 使用您的第四次尝试(伪造点击事件),控制台中是否有任何错误消息? here 是一个非常有用的触发事件的函数 我很抱歉回复晚了,在另一个项目上跑题了。好吧,控制台中没有错误消息,除了打印的“未定义”,没有任何事件。使用 Chrome 时,相同的操作会导致控制台 + google 在新选项卡中打开时打印“未定义”。很抱歉,Dispatcher 和 FireEvent 都不起作用。

以上是关于在 Safari 的新标签页中打开 PDF的主要内容,如果未能解决你的问题,请参考以下文章

在新标签页中打开链接在 Safari iOS 上不起作用

html 在新标签页中仅打开PDF链接

在新标签页中从 iframe 中打开 PDF - Google Chrome

[带有IE8的新标签页中的javascript打开页面

如何让新标签页打开新标签页中的网页。

在新标签页中打开网页 Selenium + Python