我正在开发一个包含WebView的Android应用程序。我正在尝试覆盖onKeyDown活动的方法。
我想在每次按下电话的backButton时调用javascript方法,如果该方法未定义,我想执行其他本机指令(我想关闭活动)。
这就是感觉:我本来就是这样做的
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (true) {
webView.evaluateJavascript( "try{pageGoBack();}" +
"catch{window.JSInterface.noBackFunction();}",null);
webView.clearCache(true);
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
对于every的jsp服务器端,我想实现如下所示:
<script>
function pageGoBack() {
---do something to go back---
}
}
</script>
...
此方法对于每个jsp必须具有相同的名称“ pageGoBack”,但可以具有不同的内部代码
这就是事实:在我使用pageGoBack
方法加载该jsp之一之前,一切正常(捕获到错误'undefined'并执行了JSInterface方法)。
[当我加载该页面之一时,方法“保留在缓存(???)中,并且始终执行(在没有它的那些页面中也是如此)。
((我还添加了webView.clearCache(true);
,但问题仍然存在)
谢谢-
[已解决]
这不是Android的WebView或缓存的问题。那是javascript的问题。如果将函数定义为“全局”,则在首次对其进行评估时会采用全局范围。因此,当我第一次访问包含pageGoBack()的.jsp时,该函数在全局范围内可见。
我的案子的解决方案:
我有很多具有这样的图形组件的jsp◄,这意味着“返回上一页”。我需要将当前页面的-jquery按钮点击功能关联到Android后退按钮。所以我:
function pageGoBack() {
var backBtn = $('.empty-class-for-back-button');
if (backBtn.length > 0){
backBtn.tap();
}
else{
throw "css class not found";
}
}
如果当前页面中没有◄元素,现在可以正确引发异常。
希望这对某人有帮助。