在我的Android应用程序中,用户可以使用ViewPager浏览某些HTML页面,用户可以触摸要突出显示的元素。
问题是当使用以下代码尝试使用javascript获取触摸事件时,elementFromPoint在导航到新页面时返回null,但在用户缩放页面或滚动页面后,它可以正常工作。
我发现touchstart事件的注册发生在缩放或滚动页面之后。所以它在那之后工作,虽然它在$(document).ready()
上注册 $(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);
}
谢谢
答案 0 :(得分:7)
在调用javascript后在java代码中编写下一个代码:
myWebview.scrollTo(1, 0);
myWebview.scrollTo(0, 0);
或使用放大然后缩小
myWebview.zoomIn();
myWebview.zoomOut();
答案 1 :(得分:0)
使用Mohamed Abdel Latif的解决方案(显然这是另一个蹩脚的WebView错误)下面就是在Android 4.1.2上修复它的原因。 注意:我在Android 4.4.2上进行了测试,并且不需要修复这个hack-to-fix-a。
@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);
}
});
}