Java 如何在WebView中捕获链接页面加载?
我想在Android的Java 如何在WebView中捕获链接页面加载?,java,android,android-webview,Java,Android,Android Webview,我想在Android的WebView中加载网页时应用自定义JS代码。我有一个带有自定义WebView客户端的WebView,覆盖了onPageFinished(),我使用 webView.loadUrl("javascript:(function() { ... });"); 这很有效。但是,有些页面在单击链接时会“动态”(使用AJAX?)加载页面,并且不会调用onPageFinished(),因此不会应用我们的自定义JS代码 此类页面的一个示例是(您需要使用Chrome developer
WebView
中加载网页时应用自定义JS代码。我有一个带有自定义WebView客户端的WebView
,覆盖了onPageFinished()
,我使用
webView.loadUrl("javascript:(function() { ... });");
这很有效。但是,有些页面在单击链接时会“动态”(使用AJAX?)加载页面,并且不会调用onPageFinished()
,因此不会应用我们的自定义JS代码
此类页面的一个示例是(您需要使用Chrome developer工具并设置移动视图),其中线程在单击时动态加载
如何检测这些页面加载 您必须重写该方法:
当URL即将加载到当前WebView中时,让宿主应用程序有机会控制它。如果未提供WebViewClient,默认情况下WebView将要求Activity Manager为URL选择适当的处理程序。如果提供了WebViewClient,则返回true将导致当前WebView中止加载URL,而返回false将导致WebView像往常一样继续加载URL
如果希望WebView
在旧版和新版本的Android上工作,则应该覆盖两次,如下所示:
WebViewClient webViewClient = new WebViewClient()
{
@SuppressWarnings("deprecation") @Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
@TargetApi(Build.VERSION_CODES.N) @Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
{
view.loadUrl(request.getUrl().toString());
return true;
}
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
Toast.makeText(getApplicationContext(), "Page loaded!", Toast.LENGTH_SHORT).show();
}
};
我真的很感谢你的帮助!遗憾的是,onPageFinished()。但是当我点击某个线程,打开新页面时,这个函数就不再被调用了。Reddit页面上正在发生一些特定的事情,因为在其他网站上,当我单击常规a href
链接时,加载新页面时会调用onPageFinished()
。但不是在Reddit上:(@PrimožKralj,你必须重写方法shouldOverrideUrlLoading
,就像我的例子一样。这个方法特别适用于像你这样的情况。你做到了吗?只有在这种情况下,方法onPageFinished()
将在单击链接后加载新页面时被调用。是的,我已经覆盖了它两次,与您的示例相同。@PrimožKralj,您写道:Reddit页面上发生了一些特定的事情,因为在其他网站上,当我单击常规a href
链接时,onPageFinished()加载新页面时调用
。这是否意味着在其他网站上它现在可以工作(在方法
应该覆盖
覆盖之后),并且没有从覆盖shouldOverrideUrlLoading
它在其他网站上不起作用?您是否在其他网站上检查过它,有没有从覆盖shouldOverrideUrlLoading
?在其他网站上它以前没有覆盖shouldOverrideUrlLoading()
。在覆盖它们之后,这些站点没有任何变化(它可以使用或不使用)。但有问题的页面是Reddit。我无法以任何方式解决这个问题:(