【问题标题】:JavascriptInterface called but not showing ToastJavascriptInterface 调用但不显示 Toast
【发布时间】:2013-04-01 18:01:02
【问题描述】:

我有一个网络视图,它忽略了我所有的 javascript 接口方法,或者至少看起来如此。当我从普通浏览器运行该网站时,它会引发错误,因为未按预期定义接口,但这使我相信至少调用了接口方法,但还有其他问题。谁能帮我弄清楚是什么?

声明内容

    @Override
    protected void onPostExecute(ValidationResult validation)
    {
        if (validation.wasSuccessful)
        {
            URL = validation.message;
            wv = (WebView) findViewById(R.id.webView);              
            wv.addJavascriptInterface(new KioskInterface(wv.getContext()), "Android");
            WebSettings ws = wv.getSettings();
            ws.setJavaScriptEnabled(true);
            wv.loadUrl(URL);
        }
        else
        {
            errorAlert(title, msg + "\nContact network management.");
        }
    }

Kiosk 接口类

public class KioskInterface {
    Context c;

    KioskInterface(Context context)
    {
        c = context;
    }

    @JavascriptInterface
    public void showToast()
    {
        Toast.makeText(c, "Hiding Keyboard", Toast.LENGTH_LONG).show();
    }
}

Javascript

function example() {
    Android.showToast();
}

我从来没有看到任何 Toast,但我也没有收到任何错误或损坏的行为。

【问题讨论】:

  • 如果尝试输出到 Logcat 而不是显示 toast 怎么办?
  • 感谢您的回复。恐怕由于我工作中系统的一些特殊性,我无法回答您的问题。基本上,我无法通过 USB 或模拟器直接在我的计算机上进行调试。我必须将 apk 推送到设备才能进行测试。
  • 哎呀,我为你感到痛苦......顺便说一句,javascript接口调用是否发生在UI线程上?如果没有,您可以尝试从处理程序中显示吐司
  • 是的。这很糟糕,但这是一个特例。通常情况并非如此。尝试了处理程序,似乎没有什么不同。创建处理程序 onCreate 并将吐司扔到handler.post(new Runnable(){public void run(){}})
  • 那么也许您可以尝试在 showToast 方法中抛出异常以确保它被调用(应用程序将崩溃)。此外,您确定根本没有调用“示例”吗?您不能先使用 webview 来检查吗?

标签: java javascript android


【解决方案1】:

事实证明,即使您正在安装新版本的应用程序,清除缓存也很重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2014-07-04
    • 2015-06-15
    • 2016-12-13
    相关资源
    最近更新 更多