2

是否可以在 javascript 中生成一个触摸事件,该事件将在我的 android WebView 中调用 onTouchEvent() 函数?

我尝试使用以下 javascript 代码生成 touchstart 和 touchend 事件,但我的 webview onTouchEvent() 函数没有被调用。

try{
var evt = document.createEvent('TouchEvent');
evt.initTouchEvent('touchstart', true, true);
evt.view = window;
evt.altKey = false;
evt.ctrlKey = false;
evt.shiftKey = false;
evt.metaKey = false;
this.dispatchEvent(evt);

var evt1 = document.createEvent('TouchEvent');
evt1.initTouchEvent('touchend', true, true);
evt1.view = window;
evt1.altKey = false;
evt1.ctrlKey = false;
evt1.shiftKey = false;
evt1.metaKey = false;
this.dispatchEvent(evt1); 

}
catch(e)
{
    alert(e);
}

我的代码中是否缺少某些内容,或者 javascript 事件甚至没有进入 android 框架?

谢谢

4

1 回答 1

2

不确定您打算如何使用触摸事件,也不确定是否可以将触摸事件从渲染的 dom 冒泡到包含 webview 控件的处理程序,但您可以尝试这种方法:

1) 向您的 Web 视图添加一个 javascript 接口,并公开一个简单的类对象,该对象捕获您的 dom 生成的事件:

(inside onCreate of ContainerActivity)

this.mWebView.addJavascriptInterface
    ( new JavascriptContainer() {
        final private WebView mView = ContainerActivity.this.mWebView;

        @Override
        public void captureEvent(final String sDetails) {
            // do what you want with the details and webview...
        }
    }
    , "appReceiver"
    );

2)在渲染的 html 中捕获触摸事件或单击事件(或其他),并使用 javascript 将它们委托给暴露的全局“appReceiver”:

if (window.appReceiver !== undefined) {
    window.appReceiver.captureEvent('blah blah: ' + event.x + ':' + event.y);
    ...
}
于 2012-10-11T04:17:32.220 回答