【问题标题】:Android : How to use javascript interface to show toast?Android:如何使用 javascript 界面显示 toast?
【发布时间】:2013-03-25 20:30:54
【问题描述】:

我想从 webview 中显示的网页中显示 toast,例如 Google 的示例:http://developer.android.com/guide/webapps/webview.html

我为此创建了一个名为:WebAppInterface.java 的类:

包 com.test.test;

import android.annotation.TargetApi;
import android.app.ActionBar;
import android.os.Bundle;
import android.content.Context;
import android.os.Build;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.NavUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.Color;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings;
import android.webkit.WebChromeClient;
import android.webkit.JavascriptInterface;
import android.app.Activity;
import android.view.KeyEvent;
import android.app.ProgressDialog;
import android.view.Window;
import android.widget.Toast;
import com.test.test.R;

public class WebAppInterface extends Activity{
    Context mContext;

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

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

这是我的主要活动代码MainActivity.java

class JsObject {
    @JavascriptInterface
    public String toString() { return "injectedObject"; }
 }
myWebView.addJavascriptInterface(new JsObject(), "injectedObject");

网页视图加载的页面包含以下代码:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>

我完全按照 Google 示例中的说明进行操作,但它不起作用...为什么?

谢谢!

【问题讨论】:

    标签: javascript android webview


    【解决方案1】:

    使用

    myWebView.addJavascriptInterface(new JsObject(), "Android");
    

    在 javascript 中,变量 Android 将可用。您在注册 Javascript 接口时使用了 injectedObject

    http://developer.android.com/guide/webapps/webview.html

    【讨论】:

    • 不应该JsObjectWebAppInterface
    • 我相信它可以是任何Java类对象引用。
    • 好吧,名字无关紧要,但这就是 OP 用@JSInterface showToast() 命名的类。JSObject 没有任何有用的方法。
    • 正确,它必须有方法实现来调用 toast,然后从 JS 调用。
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2011-12-09
    相关资源
    最近更新 更多