【问题标题】:Opposit to @JavascriptInterface in Android WebView? [duplicate]与Android WebView中的@JavascriptInterface相反? [复制]
【发布时间】:2017-09-04 11:18:09
【问题描述】:

我知道如何在JavaScript 代码中调用Java 方法。它是由@JavascriptInterface 注解完成的。但是如果我想通过Android 确定应该调用哪个方法from JS 呢?我正在使用提到的注释在 JS 中调用 Android Dialog,其中我有 switch 语句,它应该确定应该在 JS 中调用哪个函数。我使用了一个不起作用的标志,因为对话框不同步,所以方法 showDialog() 甚至在对话框开始之前就完成了。有什么办法可以到达对面的Android-JS通信吗?

@JavascriptInterface
public int showDialog(){
    new AlertDialog.Builder(this.activity)
            .setTitle("Share iamge as...")
            .setItems(new CharSequence[]{"Image", "PDF document", "Print"}, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which){ // this switch should determine which JS function I call
                        case 0: chosenMethod = 0; // here should be called JS function (eg. exportImage() from JS code)
                            Log.v("Dialog onClick()", "method chosen" + chosenMethod);
                            break;
                        case 1: chosenMethod = 1;
                            Log.v("Dialog onClick()", "method chosen" + chosenMethod);
                            break;
                        case 2: chosenMethod = 2;
                            Log.v("Dialog onClick()", "method chosen" + chosenMethod);
                            break;
                    }
                }
            })
            .create().show();
    Log.v("Dialog out of onClick", "method chosen" + chosenMethod);
    return chosenMethod;
}

【问题讨论】:

  • 你想知道how to call JS in WebView吗?
  • @VladMatvienko 是的,要发布一些代码

标签: javascript java android webview


【解决方案1】:

你可以的

webView.loadUrl("javascript:doSomething()");

在您的 webview 中加载网页后的任何时间,运行 JS 函数。

如果它不起作用:检查您的 webview 设置(安全/js)。

【讨论】:

  • 我应该将我的WebView 传递给方法还是有另一个选项可以调用loadUrl
  • 您最好在您的演示者/活动/片段中打开对话框,并在对话框中使用回调,返回给它的创建者。 presenter/activity/fragment 中的回调实现可以对 WebView 进行 JS 调用。但这实际上是另一个问题。祝你好运
  • 它就像一个魅力,但我在调用函数时遇到了一个问题:Uncaught ReferenceError: methodName is not defined
  • 应该将 javascript 改为我从中调用方法的脚本的名称吗?
猜你喜欢
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2016-09-14
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
相关资源
最近更新 更多