首先我浏览网页,但没有找到符合我案例的答案。 我想从webview中获取特定的重定向URL,然后保持webview不打开它。在用户授权我的应用程序后,该案例是Instagram重定向网址。怎么做?这是我的代码:
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://api.instagram.com/oauth/authorize/?client_id=my_client_id&redirect_uri=my_redirect_uri&response_type=code");
答案 0 :(得分:3)
在加载网址之前,您必须设置自定义WebviewClient覆盖webview的shouldOverrideUrlLoading方法。
mWebView.setWebViewClient(new WebViewClient()
{
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url)
{
return shouldOverrideUrlLoading(url);
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request)
{
Uri uri = request.getUrl();
return shouldOverrideUrlLoading(uri.toString());
}
private boolean shouldOverrideUrlLoading(final String url)
{
Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url);
// Here put your code
return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false.
}
});
mWebView.loadUrl("Your URL");
在webview中查看处理重定向网址的示例代码,无需下载即可打开PDF。 https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500
答案 1 :(得分:2)
你应该覆盖shouldOverrideUrlLoading:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView wView, String url) {
if (url.indexOf('api.instagram.com') > -1) //check if that's a url you want to load internally
{
webView.loadUrl(url);
return true;
}
else
{
return false; //Let the system handle it
}
}
});
答案 2 :(得分:1)
最后感谢Udi I对我的问题给出的答案,稍作改动,我设法找到问题的解决方案。以下代码对我有用:
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView wView, String url) {
if (url.indexOf("some part of my redirect uri") > -1)
return true;
else
return false;
}
});
webView.loadUrl(myUrl); //myUrl is the initial url.
使用上面的代码,如果有任何包含重定向uri的url,webView将无法加载它。否则,webView将加载它。还要感谢卡米尔卡明斯基。
答案 3 :(得分:0)
只需为WebViewClient
设置WebView
,然后覆盖shouldOverrideUrlLoading
中的WebViewClient
即可。在该方法中,您可以获取您的网址,并确定您的WebView
是否应该遵循重定向网址。这是一个例子:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// here you can assign parameter "url" to some field in class
// return true if you want to block redirection, false otherwise
return true;
}
});
答案 4 :(得分:0)
您可以比较网址字符串/特定字词,并据此采取相应措施 -
public boolean shouldOverrideUrlLoading(WebView view, String url) {
super.shouldOverrideUrlLoading(view, url);
if (url.contains(".pdf")
openPDF(url); // handle pdf opening
if(url.startsWith("tel:")
callNumber(url); // handle call processing
...
}
只需添加更多内容,即可阻止webview显示传统错误消息屏幕或绕过已知错误 -
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
if (errorCode == -10) {
System.out.println("Error occured: Error code: "
+ errorCode + "..Ignoring this error");
return;
}
else
{
// Show your custom screen to notify error has occured
}
...
}