【问题标题】:get value form Android function that is call in javascript and return it to js获取在 javascript 中调用的 Android 函数的值并将其返回给 js
【发布时间】:2015-04-02 17:38:34
【问题描述】:

我已经尝试了这段代码并且卡住了很多天。
实际上我想要的是为数学公式集成 mathjax 库并从中获取输出。

 <html>
<head>
<style>
body{
background-color: #FA5858;
color:#fff;
}
input{
background-color: #F7D358;
width: 300px;
padding:10px;
color: #000;
}
div#content{
padding:20px;
background-color: #F7D358;
color: #000;
}
</style>
<script type="text/javascript"  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">

    function showAndroidToast(toastmsg) {
        var x= Android.showToast(toastmsg);
        return x;
    }

function testcall(toastmsg){
 alert(showAndroidToast(toastmsg));
}
</script>
</head>
<body>
<center>
<h3>Binding JavaScript code to Android code</h3>
<div id="content">

</div>
<div>
Here are few examples: 
When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</div>
<div>
<input type="button" value="Make Toast" onClick="testcall('Toast made by Javascript New:)')" /><br/>

</div>
</center>
</body>
</html>

这在我的 android 代码中

    public class WebAppInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /**
     * Show Toast Message
     * @param toast
     */
    public String showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        String test="\\hspace1ex \\color{blue} {Simplify:} \\hspace1ex 2x(3x+2xy)";
        return test;
    }
    }

但是我的 android 代码没有向 javascript 函数返回任何值。
任何帮助表示赞赏。

喜欢,

这是我的安卓功能

   public String showToast() {

    String test="\\hspace1ex \\color{blue} {Simplify:} \\hspace1ex 2x(3x+2xy)";
    return test;
}

and in javascript i want the value that is return by this showToast() function

谢谢

【问题讨论】:

  • 如何初始化 Webview?请发布更多代码:)
  • 您好,我也遇到了同样的问题,请问您解决了吗?

标签: javascript android webview


【解决方案1】:

这是我在 App 中所做的:

设置 Web 视图:

  final WebView webView = new WebView(context);
  webView.getSettings().setJavaScriptEnabled(true);
  webView.addJavascriptInterface(new WebViewInterface(), "Android");
  webView.loadUrl("file:///android_asset/web/page.html");

使用此 WebViewInterface 实现:

import android.webkit.JavascriptInterface;

public class WebViewInterface {

    @JavascriptInterface
    public void log(String text) {
       Log.d("TAG", text);
    }
}

page.html 位于 assets/web 文件夹中,如下所示:

<!DOCTYPE html>

<html>
<head>
    <script language="javascript" src="script.js">  </script>
</head>
<body>
</body>
</html>

script.js 文件也位于 assets/web 文件夹中:

function logText(text) {
    Android.log(text);
}

function toBeCalledFromAndroid(text) {
    // Do something in javascript
}

javascript 中的 logText 函数调用 Android 中的 Navive log 方法。

要从原生 Android 代码调用 Javascript 函数,您必须执行以下操作:

String loadingUrl = "javascript:toBeCalledFromAndroid('" + text + "')";
webView.loadUrl(loadingUrl);

【讨论】:

  • 感谢您的回复.. 但我想要的是从 WebAppInterface 函数中传递字符串并在 javascript 中获取它的值
  • @PaMADo 你误解了我的问题..你能告诉我如何获得 javascript 的字符串形式接口吗?看看我更新了我的问题..
  • 这应该在您的示例中显示祝酒词: String loadingUrl = "javascript:showAndroidToast('" + text + "')"; webView.loadUrl(loadingUrl);
  • 这可以帮助你:codelixir.com/…
  • 谢谢..我会通过它..让你知道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 2016-02-13
  • 2020-02-02
  • 2014-03-01
  • 2016-09-17
  • 2015-12-03
相关资源
最近更新 更多