2012-07-31 29 views
0

我有一个webview,显示一条消息来确认用户交互。在该页面上的任何其他用户交互之后,该消息应该淡出。为此,我检测到任何onTouchEvent并将呼叫注入网页以触发消息淡出。WebView loadURL(“javascript:XYZ”)会在我的webview中执行好几次

这首次运行良好,但如果我第二次执行此操作(网页未重新载入,但通过将不透明度设置为1并显示为“阻止”,通过javascript再次显示消息),消息再次出现但随后会立即淡出,而不会与用户进行任何交互。从日志语句中我可以看到onTouchEvent没有被触发,我也没有注入javascript。

我怀疑loadURL在网页中创建了一些弹性呼叫,并以某种方式再次激活。 有没有什么办法可以清除这个,看到这个只执行一次?

我赶上的onTouchEvent在我的WebView这样的:

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; 
    } 

,并在web视图的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); 
    } 
} 

回答

0

我自己找到了一种解决方法:在窗口之前,即2个区间调用。 window.clearInterval(推子)确实解决了这个问题。我不明白为什么,但它看起来像间隔计时器保持永久运行,并没有正确关闭。

相关问题