【问题标题】:Android - How to generate touch event from javascript?Android - 如何从 javascript 生成触摸事件?
【发布时间】:2012-10-10 22:44:45
【问题描述】:

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

谢谢

【问题讨论】:

    标签: android webview simulate


    【解决方案1】:

    不确定您打算如何使用触摸事件,也不确定是否可以将触摸事件从渲染的 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);
        ...
    }
    

    【讨论】:

    • 我可以确认这会起作用,我会回答同样的问题。 @sofarsogood 在您的 WebView 上,您可以使用 myWebView.addJavascriptInterface(aJavaObjectIWillUseInJavaScript,"myJavaObject"); 在 JavaScript 端添加您想要访问的任何对象。然后在 JavaScript 上,注册一个事件监听器,它将使用 myJavaObject.someMethod(param1,param2,...) 在 Android 领域触发所需的行为。
    • 我还应该注意这种方法引起的安全问题...在您的 webview 中呈现的任何 javascript 都可以调用您公开的全局 captureEvent() 方法——确保验证传入的参数。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多