WebView加载URL(“javascript:XYZ”)在我的网络视图中执行了好几次
WebView loadURL("javascript:XYZ") get executed several times in my webview
我有一个网络视图,它显示了一条确认用户交互的消息。该消息应该在该页面其他地方的任何用户交互后淡出。为此,我检测任何onTouchEvent,并向网页注入一个调用,以触发消息淡出。
第一次这样做效果很好,但如果我第二次这样做(网页没有重新加载,但通过javascript将不透明度设置回1并显示为"阻止",消息会再次显示),但在没有任何用户交互的情况下,消息会立即消失。从日志语句中,我可以看到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,以触发淡出消息元素的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);
}
}
我自己发现了一个解决方案:在用window进行2次Interval调用之前,即window.clearInterval(fader)确实解决了这个问题。我不太明白为什么,但看起来间隔计时器确实一直在运行,并且没有正确关闭。
相关文章:
- 如何建立一个网页,检查我的路由器网络接口是否可以访问
- JQuery和Javascript没有'在我的项目中不起作用,但在网络上起作用
- 如何使用默认的网络摄像头拍摄照片并将其保存在我的c#.net web应用程序中
- 我可以在不显示网络视图的情况下使用phonegap吗
- 如何从我的机器提供HTML + JS + CSS网络应用程序,以便其他人可以查看它
- 如何制作登录表单以登录我的网络邮件
- WebView加载URL(“javascript:XYZ”)在我的网络视图中执行了好几次
- 我的Javascript项目正在访问网络摄像头,但没有显示任何内容
- 无法使用我的代码(html/js/css)初始化网络摄像头
- 在我的脸书墙上自动共享网络内容
- D3地图没有显示,尽管它在我的网络服务器上
- 序列化方向结果到 JSON 发送到我的网络服务无法正常工作
- 使用科尔多瓦在我的网络服务器上存储 GCM ID 不起作用
- 我的mp3链接被下载,而不是在我的网络播放器上流式传输
- 解析自定义网络钩子:我可以查询我的表吗?
- 我的网络应用程序如何与串行端口通信
- 在我的社交网络中实施反CSRF
- 在我的网络应用程序中使用backbonejs构建菜单
- 使用我的网络应用程序在Facebook上分享图像
- HTML / JavaScript - 从我的网络在Facebook墙上发布消息