我有一個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);
}
}