【问题标题】:Calling Java method in Android from JavaScript using webview使用 webview 从 JavaScript 调用 Android 中的 Java 方法
【发布时间】:2016-05-07 01:32:50
【问题描述】:

我正在尝试访问我的 Java 方法 helloWorld();在 Android 中使用 JavaScriptInterface,从我正在查看的页面中使用 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 查看的页面上)

HTML 按钮

<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);
});

有谁知道我在这里做错了什么?我只想在我的 HTML 页面中提醒来自 android 的“Hello World”。

任何指针都非常感谢!

【问题讨论】:

  • 尝试在helloWorld 中输入一个日志,看看它是否被调用。
  • 为什么你用 WINDOW.JSinterface 调用它而不是直接用 JSInterface 调用它?
  • @r4phG 实际上,我不知道为什么,我一直在尝试遵循互联网上的一些指南。我会尝试不使用“窗口”。
  • @Coderap 你试过了吗? :D
  • 你在使用之前加载了jquery吗?尝试使用 javascript 而不是 jquery,然后再试一次。

标签: javascript java android html webview


【解决方案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 代码?我可以以某种方式阻止这种行为吗?在编码/测试新东西时,缓存很麻烦。

【讨论】:

    【解决方案2】:

    尝试在加载 url 之前添加这行代码,并确保您在 html 中引用了您的 jQuery 库。

    web.setWebChromeClient(new WebChromeClient(this));
    

    【讨论】:

    • 我会给你一个赞成票,不是因为你解决了答案,但这确实帮助我显示“警报”。当我设法传递数据时,警报还没有起作用,但是通过添加这行代码,我也可以警报数据。谢谢你:)
    • @Coderap 很高兴我能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多