账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Android 9.0,WebView中,应该如何实现 JS和Java原生代码的交互?
    • 2019-01-03 00:00
    • 10
    94
    0

    问题描述


    情况如下:有很多用户升到了Android 9.0系统。然后我们公司的同事发现,以往常用的三种 js和原生Java交互的方式,失效了:

    方式1:通过 WebView的addJavascriptInterface()进行对象映射
    @JavascriptInterface
    
    方式2:通过 WebViewClient 的方法shouldOverrideUrlLoading ()回调拦截 url
    
    方式3:通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调
    拦截JS对话框alert()、confirm()、prompt() 消息
    
    (以上3种方式,都无法实现  js和原生Java交互。在  Android 9.0 版本之下。)
    

    而且,还出现了以下问题:

    在WebView的网页中,通过  document.location.href = 'https://www.baidu.com',
    类似这样的代码,
    无法实现网页跳转。
    
    (此处,为了避免  Android 9.0 对于 http协议的安全限制,这里采用了  https://头的协议。)
    
    (也可能因为这个无法跳转的原因,导致shouldOverrideUrlLoading ()回调拦截 url  ,无法生效???)
    
    


    问题出现的环境背景及自己尝试过哪些方法


    网上似乎很难找到相关的资料?

    我只在 StackoverFlow,看到了2篇, WebView不能正常 loadUrl的文章,但这似乎 和本问题无关。



    相关代码


    因为源代码过于冗长,这里就先不贴上来了。

    
    现有的  Android端源代码,以及  WebView里面的代码,  
    在  Android 8.1  至  Android 4.4.4  的版本之间,
    都是可以正常运行、正常实现  js和原生Java  的交互的。
    
    
    目前经过试验的结果,只有  Android 9.0  系统的Android机器,出现了本次描述的问题。
    
    


    你期待的结果是什么?实际看到的错误信息又是什么?


    Android 9.0 ,不能用老方式实现 js和原生之间交互,的原因是什么?

    是不是因为 9.0 新特性的出现,需要 修改部分代码?

    有没有什么我没注意到的 WebView配置的坑?

    或者,应该采用什么新的办法,来兼容 Android 9.0 平台之上的 js和原生Java之间的交互?

    2
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部