Android webView评价JavaScript执行未定义的函数

问题描述 投票:0回答:1

我正在开发一个包含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);,但问题仍然存在)

谢谢-

javascript android android-webview onkeydown
1个回答
0
投票

[已解决]

这不是Android的WebView或缓存的问题。那是javascript的问题。如果将函数定义为“全局”,则在首次对其进行评估时会采用全局范围。因此,当我第一次访问包含pageGoBack()的.jsp时,该函数在全局范围内可见。

我的案子的解决方案:

我有很多具有这样的图形组件的jsp◄,这意味着“返回上一页”。我需要将当前页面的-jquery按钮点击功能关联到Android后退按钮。所以我:

  • 创建了一个空的CSS类.empty-class-for-back-button
  • 将此课程分配给所有◄组件
  • 制作了这样的全局js函数
function pageGoBack() { 
 var backBtn = $('.empty-class-for-back-button');
 if (backBtn.length > 0){
  backBtn.tap();
 }
 else{
  throw "css class not found";
 }
}
  • Android代码与我在问题中所写的相同

如果当前页面中没有◄元素,现在可以正确引发异常。

希望这对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.