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