如何从android网络浏览器调用JavaScript接口方法

How to call the JavaScript Interface methods from android web browser?

本文关键字:调用 JavaScript 接口 方法 浏览器 网络 android      更新时间:2023-09-26

我试图使用android WebView显示网页,但javascript动画非常慢。。。我试着从浏览器打开同一个页面,它工作正常。。。问题是我使用JavaScript接口来调用一些Java方法(使用WebView):

        mWebView = (WebView) findViewById(R.id.spacetree);
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        mWebView.setWebChromeClient(new MyWebChromeClient());
        mWebView.addJavascriptInterface(new JavaScriptInterface(this), "API");
        mWebView.loadUrl("MyURL");

当我在浏览器上启动这个页面时,我不知道如何使用这个界面(这样动画就可以正确显示),代码是:

        Intent i = new Intent(Intent.ACTION_VIEW, 
        Uri.parse("MyUrl"));
        startActivity(i);

PS:网页存储在本地('file:///android_asset')

它非常简单:

 mWebView.loadUrl("javascript: example()");

这可以在页面加载后进行,如果JS正确,则不会将您重定向到不同的URL。

希望这对有帮助

在文件HTML中创建函数

 function androidResponse(index) {
 AndroidFunction.sendToAndroid(index);
 }

文件中的java代码

final IJavascriptHandler handle = new IJavascriptHandler(
            ListMapActivity.this);
    webMap.addJavascriptInterface(handle, "AndroidFunction");

定义类IJavascriptHander

final class IJavascriptHandler {
    ListMapActivity ctx;
    IJavascriptHandler(ListMapActivity c) {
        ctx = c;
    }
    @JavascriptInterface
    public void sendToAndroid(String text) {
        final String msgeToast = text;
        // this is called from JS with passed value
        myHandler.post(new Runnable() {
            @Override
            public void run() {
                // This gets executed on the UI thread so it can safely
                // modify Views
                shopMapPager.setCurrentItem(Integer.parseInt(msgeToast));
            }
        });
        Toast t = Toast.makeText(getApplicationContext(), text, 2000);
        t.show();
    }
}

和的回调结果

webMap.loadUrl("javascript:androidResponse();void(0)");