弹出窗口上的PDF不能在mac机上工作

时间:2016-12-09 06:44:24

标签: javascript jquery macos-sierra

我正在尝试使用以下代码在弹出窗口中打开pdf

  $(document).on("click", ".btnOpenWindowpaid", function () {
           var fileName = $(this).attr("data-path");
           var fileNameIndex = fileName.lastIndexOf("/") + 1;
           var OnlyFileName = fileName.substr(fileNameIndex);
           var iframe = '<object type="application/pdf" data="' + fileName + '" width="100%" height="420">No Support</object>'
           $.createModal({
               title: OnlyFileName,
               message: iframe,
               closeButton: true,
               scrollable: false
           });

       });

 (function (a) {
           a.createModal = function (b) {
               defaults = { title: "", message: "Your Message Goes Here!", closeButton: true, scrollable: false };
               var b = a.extend({}, defaults, b); var c = (b.scrollable === true) ? 'style="max-height: 420px;overflow-y: auto;"' : "";
               html = '<div class="modal fade" id="myModal">'; html += '<div class="modal-dialog">'; html += '<div class="modal-content">';
               html += '<div class="modal-header">'; html += '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>';
               if (b.title.length > 0) { html += '<h4 class="modal-title">' + b.title + "</h4>" } html += "</div>";
               html += '<div class="modal-body" ' + c + ">"; html += b.message; html += "</div>"; html += '<div class="modal-footer">';
               if (b.closeButton === true) { html += '<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>' } html += "</div>";
               html += "</div>"; html += "</div>"; html += "</div>"; a("body").prepend(html); a("#myModal").modal().on("hidden.bs.modal",
                   function () { a(this).remove() })
           }
       })(jQuery);

此代码在Windows机器浏览器上完美地打开模态弹出窗口上的pdf。当我用mac机器测试时。它不起作用。

无论操作系统和浏览器如何,我如何在模式弹出窗口中打开pdf?

1 个答案:

答案 0 :(得分:0)

Safari / Chrome内置弹出式窗口拦截器可阻止其工作。允许在Safari / Chrome中打开新窗口的唯一JavaScript是javascript直接附加到点击处理程序(和其他直接用户输入处理程序)。在过去的版本中,人们想出了一些欺骗的方法(比如生成一些其他元素 - 表格或div - 并使用javascript模拟用户输入),但更新的版本更聪明地检测到这一点。我建议您重新配置一些内容,这样就不会使用延迟弹出窗口 - 毕竟这种情况通常会对用户造成不良影响。

解决方法是

我通过检查window.open()的返回值来解决这个问题。如果这是真的,请调用alert(),并提供一条消息,供用户禁用其弹出窗口阻止程序。

var myWin = window.open([args]);

if(myWin == undefined)    提醒(&#39;请停用弹出窗口拦截器&#39;);