【问题标题】:WebView loadURL("javascript:XYZ") get executed several times in my webviewWebView loadURL("javascript:XYZ") 在我的 webview 中执行了几次
【发布时间】:2012-07-31 07:32:09
【问题描述】:

我有一个 webview,它显示一条消息以确认用户交互。该消息应该在该页面上其他位置的任何用户交互后淡出。为此,我检测到任何 onTouchEvent 并返回对网页的调用以触发消息淡出。

这第一次效果很好,但如果我第二次这样做(网页没有重新加载,但通过将不透明度设置回 1 并显示为“阻止”,通过 javascript 再次显示消息)消息再次出现,但是然后在没有任何用户交互的情况下立即淡出。从日志语句中我可以看到 onTouchEvent 没有被触发并且我没有注入 javascript。

我怀疑 loadURL 在网页中创建了一些弹性调用,这些调用会一直存在并以某种方式再次激活。 有什么办法可以清除它并且只执行一次?

我像这样在我的 WebView 中捕获 onTouchEvent:

    final class MyWebView extends WebView {
    ...
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.v(TAG,"onTouchEvent");
        if (mUndoActive && (event.getAction() == MotionEvent.ACTION_DOWN)) {
            mUndoActive = false;
            mLastAction = LAST_ACTION_NONE;
            Log.v(TAG,"send hide message");
            handler.sendEmptyMessageDelayed(CLICK_ON_WEBVIEW, 300);
        }
        return super.onTouchEvent(event);
    }
}

在父活动中,我覆盖了 handleMessage 并将 javascript 注入到我的 webview 以触发淡出消息元素的 javascript,如下所示:

    @Override
    public boolean handleMessage(Message msg) {
      Log.v(TAG,"handleMessage triggered");
      if (msg.what == CLICK_ON_WEBVIEW){
        Log.v(TAG,"handle message registerd click from stack view web page");
        webview.loadUrl("javascript:hideMessage()");
        return true;
      }
      return false;
    }

webview 中的 javascript 是:

function hideMessage() {
  var message = document.getElementById("message");
  if (message != null) {
    if (!message.style.opacity) {
     message.style.opacity = 1;
    } 
    var fader = setInterval(function(){
      message.style.opacity -= .02;
      if (message.style.opacity <= 0) {
        clearInterval(fader);
        message.style.display = "none";
      }
    }, 25);
   }
 }

【问题讨论】:

    标签: javascript android android-webview


    【解决方案1】:

    我自己找到了一个解决方案:在 2 个间隔调用之前使用窗口,即。 window.clearInterval(fader) 确实解决了这个问题。我不太明白为什么,但似乎间隔计时器确实一直在持续运行并且没有正确关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多