2012-07-31 83 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(推子)確實解決了這個問題。我不明白爲什麼,但它看起來像間隔計時器保持永久運行,並沒有正確關閉。

相關問題