在 Android WebView 中打开一个 activity window,在 JavaScript 中传递一个字符串?

Open an activity window in Android WebView passing a String in JavaScript?

我想在 Android 中打开一个 activity window WebView,在 JavaScript 中传递一个字符串,但我总是得到这个未定义的错误:

05-18 06:32:02.586 13351-13351/com.vaydesign.tw3 I/chromium﹕ [INFO:CONSOLE(11)] "Uncaught TypeError: Cannot read property 'openActivity' of undefined", source: file:///android_asset/index.html (11)

我的一部分 MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebView myWebView = (WebView) findViewById(R.id.webView1);
    myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
    myWebView.setWebViewClient(new WebViewClient());

    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.loadUrl("file:///android_asset/index.html");
    // Caching
    myWebView.getSettings().setDomStorageEnabled(true);
    String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
    myWebView.getSettings().setAppCachePath(appCachePath);
    myWebView.getSettings().setAllowFileAccess(true);
    myWebView.getSettings().setAppCacheEnabled(true);
}

public class WebAppInterface {
    public Context mContext;
    WebAppInterface(Context c) {
        mContext = c;
    }
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }

    public void openActivity(String activity){
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(activity));
        mContext.startActivity(i);
    }
}

HTML:

<div class="entry" onclick="window.JSInterface.openActivity('About');">About</div>

你设置的接口名称

myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");

是"Android",你应该在

中使用它
<div class="entry" onclick="window.Android.openActivity('About');">About</div>

在 openActivity 方法上添加注解 @javascriptInterface。

@JavascriptInterface
public void openActivity(String activity){
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(activity));
    mContext.startActivity(i);
}

我花了一整天调试一个类似的问题,我得到了错误:

"Uncaught TypeError: window.Android.openActivity is not a function"

我错误地将带注释的方法设置为私有。

如果您要从 Javascript 调用它,请检查您的方法签名以确保它是 public。