悠哉的农民
悠哉的农民
  • 发布:2021-03-16 11:05
  • 更新:2021-03-17 10:07
  • 阅读:1312

webview怎么拦截下载事件啊

分类:uni-app

默认webview里面存在下载的话会提示一个下载框,但是下载完毕后没有提示安装也没有显示文件位置。所以我打算用默认浏览器来接管webview里面的下载事件,但是尝试使用setDownloadListener没用啊。不要说通过拦截url的方式,那种方式太容易出错了。

我的代码如下,可是一点用也没有,该怎么办啊:
boxNativeSetting(){
var native = box.nativeInstanceObject();
// 重写方法
var DownloadListener = plus.android.implements("android.webkit.DownloadListener",{
"DownloadStart":function(url,userAgent,contentDisposition,mimeType,contentLength){
console.log(url);
plus.runtime.openURL(url);
}
});
plus.android.invoke(native,"setDownloadListener",DownloadListener);
}

2021-03-16 11:05 负责人:无 分享
已邀请:
回梦無痕

回梦無痕 - 暂停服务

正常运行 js:

document.addEventListener('plusready', function() {  
    //console.log("所有plus api都应该在此事件发生后调用,否则会出现plus is undefined。")  
    var url ='https://a.app.qq.com/o/simple.jsp?pkgname=com.tencent.tmgp.cod&channel=0002162647414d455f43454e5445525f4348414e4e454c5f3830303030303031335f3130303333303137&fromcase=70037&scenevia=SYZSHOME';  
    var downPage = plus.webview.create(url, 'down');  
    downPage.show()  
    var downPageNativeInstance = downPage.nativeInstanceObject();  
    var DownloadListener = plus.android.implements("android.webkit.DownloadListener", {  
        "onDownloadStart": function(url) {  
            console.log("Invoked url: " + url); // 输出“Invoked url: xxx”  
        }  
    });  
    plus.android.invoke(downPageNativeInstance,"setDownloadListener",DownloadListener);  
});
  • 悠哉的农民 (作者)

    看来是uniapp的BUG,我测试在5+app模式下正常,UNIapp下就没反应还是吊起了下载

    2021-03-17 11:37

  • 回梦無痕

    回复 悠哉的农民: 直接写vue页面的确不行,但可以加载一个本地html文件或者通过renderjs去运行这个setDownloadListener代码。

    2021-03-17 13:48

  • 回梦無痕

    回复 悠哉的农民: 这个问题大概是因为,直接写vue页面上的代码是运行在逻辑层,需要把代码放到视图层去运行。

    2021-03-17 13:50

  • 悠哉的农民 (作者)

    回复 回梦無痕: 感谢大佬的指点,我尝试了可以用evaljs方式来注入也是没问题的。

    2021-03-17 14:46

  • newtome1111

    回复 悠哉的农民:我用js注入的方式也不行,setDownloadListener设置以后,下载行为确实是拦截了,但是onDownloadStart里面的方法并没有执行。能不能贴一下你的代码,怎么写的?谢谢!

    2021-09-10 14:46

该问题目前已经被锁定, 无法添加新回复