Android和JS的交互问题

前端写了这样的代码。

clipboard.png

clipboard.png

我应该怎么响应呢?大神请帮忙解答一下,不要说 让我去百度了。我找不到不会才提问的。

阅读 5.1k
7 个回答

让你去Google 你去吗?哈哈哈,说着玩的。。。下面是解答:

return true;

是想把这个 布尔值返回给Android端吗?如果是就调用Android 中约定好的方法。
如果想从Javascript调的方法里面获取到返回值,只需要定义一个带返回值的@JavascriptInterface方法:

    public class AndroidMessage {
        @JavascriptInterface
        public String getMsg() {
            return "form java";
        }
    }

添加Javascript的映射Webview:

    webView.addJavascriptInterface(new AndroidMessage(), "AndroidMessage");

Javascript直接调用Java方法:

function showAlert(){
        var str=window.AndroidMessage.getMsg();
        console.log(str);
 }

你可以参考这里:Android 与 js 交互

  • 可以使用JavascriptInterface, 具体看WebView的addJavascriptInterface方法:
    https://developer.android.goo... java.lang.String).不过17以前存在漏洞,JS可以通过反射获取到App的公开属性和方法,并使用App已有的权限

This method can be used to allow JavaScript to control the host application. This is a powerful feature, but also presents a security risk for apps targeting JELLY_BEAN or earlier. Apps that target a version later than JELLY_BEAN are still vulnerable if the app runs on a device running Android earlier than 4.2. The most secure way to use this method is to target JELLY_BEAN_MR1 and to ensure the method is called only when running on Android 4.2 or later. With these older versions, JavaScript could use reflection to access an injected object's public fields. Use of this method in a WebView containing untrusted content could allow an attacker to manipulate the host application in unintended ways, executing Java code with the permissions of the host application. Use extreme care when using this method in a WebView which could contain untrusted content.
  • 可以使用这个JSBridge, 不过这个用了以后就不能使用WebView.setWebViewClient()方法:
    https://github.com/lzyzsd/JsB...

  • 如果功能简单的话, 参考上面JSBridge的思路, 可以自定义实现WebView的alert方法,用了传事件

话说SF怎么知道我刚刚弄了Android和JS交互?

WebView有一个addJavascriptInterface方法,可以看下这个,或者自己通过WebChromeClient自己实现。
还有就是也可以使用第三方封装,比如cordovacordova-android

先吐个槽,你们这前端相当于什么都没干嘛。。。
我接触这方面的东西不算多,也就是做过一些简单的交互,说一点粗浅的用法
关于js与Android原生交互,Android本身提供了JavaScriptInterface注解,使用这个注解可以实现两端的交互,但是回调执行起来却不怎么方便(或许是我使用的姿势不对)。
同时这里有一个不错的轮子,使用起来更简单些,你也可以参考下:jsBridge.

去了解一下android和JS交互的基础原理,其中之一是WebView.addJavaScriptInterface(),这个看明白了,你就知道该怎么做了,如果你仅仅是想实现个back的功能,非常的简单,如果你的android和JS有很多类似于这样的交互,建议你引入框架,比如JSBridge,这个框架把android和JS的通信进行了封装,所以大规模交互的时候,你用起来会轻松很多。望采纳

1 篇内容引用
推荐问题
宣传栏