2013-01-23 69 views
6

在我的Android应用程序中,用户可以使用ViewPager浏览一些HTML页面,用户可以触摸某个元素以突出显示。Android - JavaScript:触发事件不会触发,直到放大或滚动页面

问题是当使用下面的代码尝试使用javascript获取触摸事件时,elementFromPoint在导航到新页面时返回null,但在用户缩放页面或滚动页面后,它的工作原理是正确的。

我发现touchstart事件的注册发生在缩放或滚动页面后。所以它的工作原理是,虽然它被注册在$(文件)。就绪()

 $(document).ready(function(){ 
      document.addEventListener("touchstart", touchstart, false);  
     });  

     function touchstart(e) {        
      var x = e.targetTouches[0].clientX; 
      var y = e.targetTouches[0].clientY;        
      el = document.elementFromPoint(x, y); 
      } 

谢谢

回答

7

写下面的代码在Java代码中调用JavaScript之后之后:

myWebview.scrollTo(1, 0); 
    myWebview.scrollTo(0, 0); 

或使用放大,然后缩小

myWebview.zoomIn(); 
    myWebview.zoomOut(); 
+0

谢谢,这段代码运行良好,但是为什么? –

+0

感觉很好笑,但它的作品。顺便说一下,如果您从屏幕外动画您的WebView,则需要在动画完成后运行这些代码行。我将它设置在Animator.AnimatorListener()的onAnimationEnd方法中,它效果很好。我也证实,即使页面的内容不够大,需要滚动,它也能正常工作。 –

+0

布赖恩 - 你还记得如果你没有等待动画完成并且调用缩放/缩小方法,webview是否是白色的? –

0

使用穆罕默德阿卜杜勒拉蒂夫的解决方案(显然这是anoth er lame WebView bug)以下是我在Android 4.1.2上修复它的原因。 注意:我在Android 4.4.2上测试了这个,并且不需要这个hack-to-fix-a-bug。

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    final WebView myWebView = (WebView) findViewById(R.id.mywebview); 
    myWebView.setHorizontalScrollBarEnabled(false); 
    myWebView.getSettings().setJavaScriptEnabled(true); 
    myWebView.loadDataWithBaseURL("file:///android_asset/", YOUR_HTML_GOES_HERE, "text/html", "utf-8", null); 

    myWebView.setWebViewClient(new WebViewClient() 
    { 
     // overcome the ontouchstart registration bug ! 
     @Override 
     public void onPageFinished(WebView view, String url) 
     { 
      super.onPageFinished(view, url); 
      final WebView myWebView = (WebView) findViewById(R.id.mywebview); 
      myWebview.scrollTo(1, 0); 
      myWebview.scrollTo(0, 0); 
     } 
    }); 
}