我正在制作自动搜索程序。
请先查看代码。
syncdLoadUrl :调用 loadurl 并等待 onpage完成调用
private String search(AutoClickItem item) throws InterruptedException {
this.synchronizedLoadUrl("http://m.naver.com");
this.loadUrl("javascript:" + querySelector("#query") + ".click();");
this.loadUrl("javascript:void(" + querySelector("#query") + ".value = '" + item.query + "');");
this.loadUrl("javascript:" + querySelector("button[type=submit]") + ".click();"); // this calls submit() and move to another location.
return pageFinishedQueue.take();
}
public class AutoClickWebViewClient extends WebViewClient {
BlockingQueue<String> pageFinishedQueue;
public AutoClickWebViewClient(BlockingQueue<String> pageFinishedQueue) {
this.pageFinishedQueue = pageFinishedQueue;
}
@Override
public void onPageFinished(WebView view, String url) {
pageFinishedQueue.add(url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
运行此代码时的过程:
首先,在页面上完成以"m.naver.com"触发
其次,应该用"m.search.naver.com/search.naver?query=%EC%95%84%EC%9A%B0&where=m"触发覆盖网址加载
因为我打电话给"this.loadUrl("javascript:" + querySelector("button[type=submit]") + ".click();");
第三,在页面上完成以"http://m.naver.com"<问题触发>问题触发>
我不明白为什么第三个在PageDone上用"http://m.naver.com"开火
网络视图显示"m.search.naver.com/search.naver?query=%EC%95%84%EC%9A%B0&where=m",但在页面上完成以"m.naver.com"触发!
我想知道为什么它像这样工作以及如何解决这个问题。
来自shouldOverrideUrlLoading()
的文档:
返回:如果主机应用程序想要离开当前 WebView 并处理 URL 本身,则为 True,否则返回 false。
听起来您没有离开 WebView,因此您应该返回 false。