微信内置浏览器不支持下载APK文件
今天做项目,遇到在微信公众号里面打开一个页面,然后页面上有需要下载apk安装包的功能,pc网页,手机浏览器都调试没问题了,然后放到微信里面就不行咯,打开之后就是空白的,也没有任何提示,查资料了解到:因为腾讯为了自身利益,屏蔽了其他app直接在微信中下载,真不真实不知道。。。。
然后找了一些解决方案,以下这个方案,亲自测试是可以正常使用的,文件使用php编写
1 <?php 2 if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) { 3 //其实没太弄明白,为什么要加这2句,就可以从微信内置浏览器跳出去到手机浏览器 2021-03-30 4 header("Content-Disposition: attachment; filename=\"load.doc\""); 5 header("Content-Type: application/vnd.ms-word;charset=utf-8"); 6 } 7 $data = isset($_GET['data']) && $_GET['data'] ? $_GET['data'] : ''; 8 $name = isset($_GET['name']) && $_GET['name'] ? $_GET['name'] : ''; 9 $downloadUrl = $data ? base64_decode($data) : ''; 10 ?> 11 <!DOCTYPE html> 12 <html> 13 <head> 14 <meta charset="UTF-8"> 15 <title><?=$name?></title> 16 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"/> 17 <meta content="yes" name="apple-mobile-web-app-capable"/> 18 <meta content="black" name="apple-mobile-web-app-status-bar-style"/> 19 <meta name="format-detection" content="telephone=no"/> 20 <style> 21 body,html{width:100%;height:100%} 22 *{margin:0;padding:0} 23 body{background-color:#fff} 24 .top-bar-guidance{font-size:15px;color:#fff;height:40%;line-height:1.8;padding-left:20px;padding-top:20px;background:url(/img/wx_right_browser.png) center top/contain no-repeat} 25 .top-bar-guidance .icon-safari{width:25px;height:25px;vertical-align:middle;margin:0 .2em} 26 .app-download-btn{display:block;width:214px;height:40px;line-height:40px;margin:18px auto 0 auto;text-align:center;font-size:18px;color:#2466f4;border-radius:20px;border:.5px #2466f4 solid;text-decoration:none} 27 </style> 28 </head> 29 <body> 30 <div class="top-bar-guidance"> 31 <p> 32 点击右上角选择在浏览器打开 33 </p> 34 <p> 35 可以继续下载哦~ 36 </p> 37 </div> 38 39 <a class="app-download-btn" id="BtnClick" href="javascript:;"> 点此下载 </a> 40 41 <script> 42 43 var url = '<?=$downloadUrl?>';//更改需要跳转的地址 44 45 document.querySelector('body').addEventListener('touchmove', function (event) { 46 47 event.preventDefault(); 48 49 }); 50 51 window.mobileUtil = (function(win, doc) { 52 53 var UA = navigator.userAgent, 54 55 isAndroid = /android|adr/gi.test(UA), 56 57 isIOS = /iphone|ipod|ipad/gi.test(UA) && !isAndroid, 58 59 isBlackBerry = /BlackBerry/i.test(UA), 60 61 isWindowPhone = /IEMobile/i.test(UA), 62 63 isMobile = isAndroid || isIOS || isBlackBerry || isWindowPhone; 64 65 return { 66 67 isAndroid: isAndroid, 68 69 isIOS: isIOS, 70 71 isMobile: isMobile, 72 73 isWeixin: /MicroMessenger/gi.test(UA), 74 75 isQQ: /QQ/gi.test(UA) 76 77 }; 78 79 })(window, document); 80 81 if(mobileUtil.isWeixin){ 82 83 if(mobileUtil.isIOS){ 84 85 url = "https://t.asczwa.com/taobao?backurl=" + encodeURIComponent(url); 86 87 document.getElementById('BtnClick').href=url; 88 89 }else if(mobileUtil.isAndroid){ 90 91 document.getElementById('BtnClick').href=url; 92 93 var iframe = document.createElement("iframe"); 94 95 iframe.style.display = "none"; 96 97 iframe.src = url; 98 99 document.body.appendChild(iframe); 100 101 } 102 103 }else{ 104 105 document.getElementById('BtnClick').href=url; 106 107 window.location.replace(url); 108 109 } 110 111 112 </script> 113 114 </body> 115 116 </html>
但是最开始那2句代码的原理还不是特别清楚,欢迎大家借鉴和指点!