H5W3
当前位置:H5W3 > Andriod > 正文

【安卓】Android 9.0,WebView中,应该如何实现 JS和Java原生代码的交互?

问题描述


情况如下:有很多用户升到了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之间的交互?

回答

这个问题目前有答案了吗?

同问..这个改怎么解决.

本文地址:H5W3 » 【安卓】Android 9.0,WebView中,应该如何实现 JS和Java原生代码的交互?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址