Android - 如何从javascript生成触摸事件?

时间:2012-10-10 22:44:45

标签: android webview simulate

是否可以在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框架?

THX

1 个答案:

答案 0 :(得分: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);
    ...
}