调用 Java 方法 Android 从 JavaScript 使用webview

发布时间: 2017/3/18 13:33:35
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图访问我的 Java 方法 helloWorld (); 使用 JavaScriptInterfaceAndroid ,在页面中查看使用WebView

我是有点新来这,和我不知道为什么我没获得我的价值我 html

这是 Android 我使用的代码︰

WebView web;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    web = (WebView) findViewById(R.id.webview01);
    JavaScriptInterface jsInterface = new JavaScriptInterface(this);
    web.getSettings().setJavaScriptEnabled(true);
    web.addJavascriptInterface(jsInterface, "JSInterface");
    web.getSettings().setUseWideViewPort(true);
    web.getSettings().setLoadWithOverviewMode(true);
    web.setWebViewClient(new myWebClient());
    web.getSettings().setJavaScriptEnabled(true);
    web.loadUrl("http://exampleweb:10110/exWeb/deposits.jsp");
}

public class myWebClient extends WebViewClient
{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub

        view.loadUrl(url);
        return true;

    }
}
public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activity) {
        this.activity = activity;
    }
    @JavascriptInterface
    public String helloWorld(){
        return("hello world");
    }
}

}

这是我一直在使用的 JavaScript 代码 (我正在查看的页面上 WebView )

HTMLbutton

<td> <button type="button" class="btn btn-xs btn-primary connectToAndroid">Test android</button></td>

JavaScript

$(".connectToAndroid").on('click', function () {
var val = window.JSInterface.helloWorld();
alert(val);
});

有谁知道我在做什么在这里错了吗?我只是想提醒"Hello World"从 android 中我 HTML 页。

任何指针都不胜感激 !

解决方法 1:

这是很奇怪,我试着用这几个小时前︰

$(".connectToAndroid").on('click', function () {
  var val = Android.helloWorld();
  alert(val);
 });

然后,我改变了它,它不是说 Android 了,

然而我一直听到一种错误的说法︰

Uncaught ReferenceError: Android is not defined

过了一会儿我就想, Android.helloWorld(); 必须在某种程度上缓存我 webview 之类的应用程序。

所以,我改变了这回︰

$(".connectToAndroid").on('click', function () {
  var val = Android.helloWorld();
  alert(val);
 });

加上这︰

web.addJavascriptInterface(jsInterface, "Android");

现在的作品像一个魅力,它应该从一开始,如果没有一些缓存在某个地方,

任何人都能解释为什么发生这种情况吗?是否 android webview 实际上缓存 javascript 代码吗?和可以防止这种行为在将来不知何故?高速缓存了很多困扰,当编码测试新的东西。

官方微信
官方QQ群
31647020