我在开发一个应该封装 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 函数并获取它的布尔返回值?
首先十分感谢。