要实现在Webview中搜索并导航到下一个实例,需要遵循以下步骤:
WebViewClient webViewClient = new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 在页面加载后执行搜索
view.findAllAsync(searchedText);
}
};
public class CustomWebView extends WebView {
...
// 定义一个 OnFindListener 接口以通知搜索结果
public interface OnFindListener {
void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting);
}
// 定义一个 WebView.FindListener 的实现以接收搜索结果
private class CustomFindListener implements FindListener {
private OnFindListener listener;
CustomFindListener(OnFindListener listener) {
this.listener = listener;
}
@Override
public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) {
listener.onFindResultReceived(activeMatchOrdinal, numberOfMatches, isDoneCounting);
}
}
// 定义一个查找下一个搜索结果的方法
public void findNext(boolean forward, final OnFindListener listener) {
// 监听查找结果
WebView.FindListener findListener = new CustomFindListener(listener);
// 导航到下一个搜索结果
findNext(forward, new Runnable() {
@Override
public void run() {
// 在导航完成后更新查找结果计数器
findNext(forward, this);
// 若 listener 不为空则通知搜索结果
if (listener != null) {
listener.onFindResultReceived(getFindIndex(), getFindMatchesCount(), isFindDone());
}
}
});
}
...
}
CustomWebView webView = new CustomWebView(context);
webView.getSettings().setJavaScriptEnabled(true);
// 设置 Webview 客户端以处理加载并执行搜索
webView.setWebViewClient(webViewClient);
// 加载页面
webView.loadUrl(url);
// 导航到搜索结果的下一次结果
webView.findNext(true, new CustomWebView.OnFindListener() {
@Override
public void onFindResultReceived