我有一些逻辑,每当我尝试更改其URL时,我都希望我的WebView应用。对于加载页面中的链接,没问题,我可以通过在自定义WebViewClient上使用shouldOverrideUrlLoading方法来实现。
但是当我在我的WebView上显式调用loadUrl时,不会触发shouldOverrideUrlLoading(显然,或者在从此方法中调用loadUrl时会产生无限循环)。
有没有办法手动“预加载”网址,以便调用shouldOverrideUrlLoading方法?
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.startsWith("myapp://")
{
//Do something
}
else {
view.loadUrl(url);
}
return true;
}
当我从呈现的页面中单击链接时,这可以正常工作。但如果我打电话:
mWebView.loadUrl("myapp://whatever");
shouldOverrideUrlLoading()
未被调用。我要问的是,是否有一种方法可以将URL传递给我的webView,以便在实际加载之前将其传递给shouldOVerrideUrlLoading()
。 (即只要加载新的 ,就会调用shouldOVerrideUrlLoading()
。这就是我想要触发的事件。
答案 0 :(得分:0)
如果您的应用版本大于“ N”,则应使用此功能
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
检查功能和版本
答案 1 :(得分:0)
如果您要做的只是重复使用逻辑,只需将其提取到WebViewClient中并使用它来加载url,然后在shouldOverrideUrlLoading
()中委派给它即可:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return loadUrl(view, url);
}
public boolean loadUrl(WebView view, String url) {
if(url.startsWith("myapp://")
{
//Do something
}
else {
view.loadUrl(url);
}
return true;
}
然后代替
mWebView.loadUrl("myapp://whatever");
您这样做:
mWebViewClient.loadUrl(mWebView, "myapp://whatever");