uniapp: webview中下载链接不能正常下载

uniapp中WebView中实现按住图片保存到相册

拦截Webview窗口的URL请求 - overrideUrlLoading

背景

uniapp webview中的下载链接在app中点击后没有拉起系统下载, 并且下载完成后也不知道下载到哪里去了

原因

没查到, 猜测可能是uniapp自带webview限制或者安全策略导致, 纯H5中是正常的, 在打包成APP后出现问题

解决方式1 (拉起系统浏览器下载)

plus.runtime.openURL(url)直接调用系统的打开, 测试为拉起浏览器的下载

解决方式2 (app内下载, 下载完需自己处理, 否则也无下载记录)

拦截apk后使用plus.downloader.createDownload处理, 代码中为下载完成后安装, 请根据实际情况处理

代码


var wv;
onReady() {
      // #ifdef APP-PLUS
      var currentWebview = this.$scope.$getAppWebview(); 
	  if (uni.getSystemInfoSync().platform == "android") {
		  setTimeout(function() {
			  wv = currentWebview.children()[0]
			  // 拦截所有页面跳转,可使用参数拦截.apk的跳转  
			  wv.overrideUrlLoading({
				  mode: 'reject',
				  match: '.*\.apk.*'
			  }, function(e) {
				  console.log('下载地址', e.url)
				  // 方式1
                  plus.runtime.openURL(url)

                  // 方式2
                  var dtask = plus.downloader.createDownload(
				  	e.url, {},
				  	function(d, status) {
				  		//下载完成
				  		if (status == 200) {
				  			plus.runtime.install(plus.io.convertLocalFileSystemURL(d
				  				.filename), {}, {}, function(error) {
				  				uni.showToast({
				  					title: '安装失败',
				  					mask: false,
				  					duration: 1500
				  				});
				  			})
				  		} else {
				  			uni.showToast({
				  				title: '下载失败',
				  				mask: false,
				  				duration: 1500
				  			});
				  		}
				  	});
				  try {
				  	dtask.start(); // 开启下载的任务
				  	var prg = 0;
				  	var showLoading = plus.nativeUI.showWaiting("正在下载");
				  	dtask.addEventListener('statechanged', function(
				  		task,
				  		status
				  	) {
				  		// 给下载任务设置一个监听 并根据状态  做操作
				  		switch (task.state) {
				  			case 1:
				  				showLoading.setTitle("正在下载");
				  				break;
				  			case 2:
				  				showLoading.setTitle("已连接到服务器");
				  				break;
				  			case 3:
				  				prg = parseInt(
				  					(parseFloat(task.downloadedSize) /
				  						parseFloat(task.totalSize)) *
				  					100
				  				);
				  				showLoading.setTitle("正在下载" + prg + "%  ");
				  				break;
				  			case 4:
				  				plus.nativeUI.closeWaiting();
				  				//下载完成
				  				break;
				  		}
				  	});
				  } catch (err) {
				  	plus.nativeUI.closeWaiting();
				  	uni.showToast({
				  		title: '下载失败-03',
				  		mask: false,
				  		duration: 1500
				  	});
				  }
			  });
		  }, 1000); //如果是页面初始化调用时,需要延时一下  
	  }
      // #endif
    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值