shouldOverrideUrlLoading 的 URL 和 onPageFinished 的 URL 是不同的



我正在制作自动搜索程序。

请先查看代码。

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。

最新更新