0

我在开发一个应该封装 Web 应用程序的 Android 应用程序时遇到了很大的麻烦,我认为 StackOverflow 是我现在唯一的希望。

第一个问题如下:我需要拦截单击“关于”链接以使用我们所有应用程序的标准关于视图启动一个活动。不幸的是,当我单击页面上的链接时,内容由 AJAX 加载并且shouldOverrideUrlLoading(String url)永远不会被调用。

我的解决方法是使用 Android 的 JavaScript 接口将对象传递给 JS,以便将加载 URL 放置到该对象,如下所示:

private class JavaScriptInterface {

    @SuppressWarnings("unused")
    public boolean shouldOverrideUrlLoading(String url) {
        if (url.endsWith("about")) {
            startActivity(new Intent("foo.bar.ABOUT"));
            return true;
        }
        return false;
    }
}

这是完美的工作,它看起来根本不像一个非常丑陋的解决方法。

第二个问题是,在 Android 2.1(手机和模拟器)中,WebView 不会在历史记录中存储 AJAX 加载的 URL,因此即使使用以下代码覆盖后退按键,按下后退总是会退出应用程序:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

奇怪的是,这在所有版本的 Android >2.1 中都能完美运行。有没有可能的解决方法?

我们正在考虑调用一个 JS 函数来知道我是否可以回到历史,但是我如何从 Android 调用一个 JS 函数并获取它的布尔返回值?

首先十分感谢。

4

0 回答 0