西门吹雪@ 2021-06-09 14:06 采纳率: 33.3%
浏览 23
已结题

IOS 下载文件无法正常下载

   同样的H5 下载功能 android可以用,IOS 无法用怎么解决,用的vue框架。网络路径下载

  • 写回答

1条回答 默认 最新

  • 东海一闲人 2021-06-09 15:54
    关注


    参考链接:https://blog.csdn.net/iamTab/article/details/109595587

    问题原因:大部分现代的浏览器(Chrome/Firefox/IE 10+/Safari)都默认开启了阻止弹出窗口的策略,原因是window.open被广告商滥用,严重影响用户的使用。这个阻止弹出窗口的操作,并不是直接封杀window.open(),而是会根据用户的行为来判断这次window.open()是否属于流氓操作。

    如果是由用户触发的动作所引起的 window.open 就不会被浏览器所阻止,比如写在 onclick 这些事件 handler 里的,但如果是代码自己触发的就会被阻止。

    那么,我们可以知道,在Safari中无法open新窗口,原因是Safari的安全机制将其阻挡。

    并不是所有地方都无法正常使用,在一些ajax或者jquery的getjson等回调代码中只要调用window.open都失效。原因是苹果的安全策略拦截。
     

    解决办法:

    function download(src) {
            if ((navigator.userAgent.indexOf('MSIE') >= 0) && (navigator.userAgent.indexOf('Opera') < 0)) {
                var fileURL = window.open(src, "_blank", "height=0,width=0,toolbar=no,menubar=no,scrollbars=no,resizable=on,location=no,status=no");
                fileURL.document.execCommand("SaveAs");
                fileURL.window.close();
                fileURL.close();
            } else if (window.navigator.msSaveBlob) {
                window.open(src);
            } else {
                var $a = document.createElement('a');
                $a.setAttribute("href", src);
                $a.setAttribute("download", "");
                var evObj = document.createEvent('MouseEvents');
                evObj.initMouseEvent('click', true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                $a.dispatchEvent(evObj);
            }
        }

     

    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向