Ste*_*dle 29 android scroll webview
我正在尝试以编程方式将WebView滚动到DOM树中特定元素的位置.但到目前为止,我还没有能够让WebView响应滚动请求.我试过调用使用的JavaScript window.scrollTo(...),但WebView没有响应.在Java方面,我试过调用该WebView.flingScroll(...)方法.WebView会响应flingScroll,但我需要的是一种scrollTo(...)功能.有任何想法吗?
Ste*_*dle 47
我找到了一个更好的答案来解决这个问题.事实证明,WebView确实有scrollTo(),getScrollX()并且getScrollY()方法正如您所期望的那样.它们在文档中有点隐藏,因为它们是从View(via AbsoluteLayout- > ViewGroup- > View)继承而来的.这显然是一种WebView比有点麻烦的JavaScript界面更好的操纵滚动位置的方法.
Ste*_*dle 13
事实证明,window.scrollTo()DOES工作,你只是无法添加自己的方法命名scrollTo().出于某种原因scrollTo(),我打电话时调用了我自己的方法window.scrollTo().
因此,总而言之,要将WebView滚动到特定的DOM元素,请编写一个JavaScript函数来进行滚动:
function scrollToElement(id) {
var elem = document.getElementById(id);
var x = 0;
var y = 0;
while (elem != null) {
x += elem.offsetLeft;
y += elem.offsetTop;
elem = elem.offsetParent;
}
window.scrollTo(x, y);
}
Run Code Online (Sandbox Code Playgroud)
然后从您的Android应用程序(Java代码),告诉您的WebView加载URL:
webView.loadUrl("javascript:scrollToElement('" + elemId + "')");
Run Code Online (Sandbox Code Playgroud)
这种方法存在一些问题,例如滚动不会很好地动画,但一般机制有效.
在DOM窗口对象不正确地报告的WebView的当前滚动位置(见window.pageXOffset,window.pageYOffset或者window.scrollX,window.scrollY)如果你只是想知道的WebView的当前滚动位置,写一些JavaScript调用Java代码,并沿X通/ Y偏移.