2012-10-10 47 views
2

是否有可能在JavaScript中生成觸摸事件,它會調用我的android WebView中的onTouchEvent()函數?Android - 如何從JavaScript生成觸摸事件?

我試着用下面的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

回答

2

不知道你打算如何使用觸摸事件,也不能確認你可以從呈現的DOM上升到包含WebView控件的句柄泡沫觸摸事件,但你可以試試這個方法:

1)JavaScript接口添加到您的Web視圖和揭露一類的簡單對象,抓住你的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); 
    ... 
} 
+1

我可以證實這將工作,我打算回答相同。在你的WebView中@sofarsogood使用myWebView.addJavascriptInterface(aJavaObjectIWillUseInJavaScript,「myJavaObject」)來添加任何想要在JavaScript端訪問的對象; 然後在JavaScript上註冊一個事件偵聽器,它將使用myJavaObject.someMethod(param1,param2,...)在Android-land中觸發所需的行爲。 – Gubatron

+0

我還應該注意這種方法所帶來的安全問題......在你的webview中呈現的任何JavaScript都可以調用你公開的全局captureEvent()方法 - 確保驗證傳入的參數。 –