Android,如何在WebView中获取重定向事件?
我在我的应用程序中有一个包含web视图的活动。当我请求打开一个连接时,服务器会重定向我,但我的web视图从未得到它,并显示“页面未找到”消息。当我在我电脑的浏览器中测试URL时,它会引导我进入下一页。然而,在webView中,我从未指向第二页。我的流程应该是这样的: 1-打开URL 2-服务器指向下一个URL 3-按应用程序填写该页面中的登录表单 4-获取服务器响应 我的代码如下:Android,如何在WebView中获取重定向事件?,android,url,redirect,webview,Android,Url,Redirect,Webview,我在我的应用程序中有一个包含web视图的活动。当我请求打开一个连接时,服务器会重定向我,但我的web视图从未得到它,并显示“页面未找到”消息。当我在我电脑的浏览器中测试URL时,它会引导我进入下一页。然而,在webView中,我从未指向第二页。我的流程应该是这样的: 1-打开URL 2-服务器指向下一个URL 3-按应用程序填写该页面中的登录表单 4-获取服务器响应 我的代码如下: public void onCreate(Bundle savedInstanceState) { sup
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_loginweb);
Log.i(TAG, "Try to create activity...");
final String userId = PropertyManager.getUserId();
final String password = PropertyManager.getPassword();
Log.i(TAG, "Id: " + userId + ", Password: " + password);
final WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(this), "JsInterface");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
webView.loadUrl("javascript:document.LoginForm.tempusername.value = '" + userId + "';");
webView.loadUrl("javascript:document.LoginForm.password.value = '" + password + "';");
webView.loadUrl("javascript:document.LoginForm.Submit.click();");
webView.loadUrl("javascript:window.JsInterface.processHTML(document.getElementsByTagName('html')[0].innerHTML);");
String currentUrl = webView.getUrl();
Log.i(TAG, "current Url is: " + currentUrl);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
super.shouldOverrideUrlLoading(view, url);
Log.i(TAG, "redirect to: " + url);
view.loadUrl(url);
return false;
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
Log.i(TAG, "error code is:" + errorCode);
}
});
webView.loadUrl(PropertyManager.getLoginPageURL());
}
/*
* To bind a new interface between our JavaScript and Android code, call addJavascriptInterface(),
* passing it a class instance to bind to JavaScript of login page and an interface name that
* JavaScript can call to access the class.
*/
public class JavaScriptInterface {
Context mContext;
/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}
/** process the html as needed by the app */
public void processHTML(String html) {
Log.i(TAG, "Processing HTML...");
Log.i(TAG, "content of page: " + html);
}
/** Show a toast from the web page */
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
我的问题是
shouldOverrideUrlLoading()
方法在重定向期间从不调用。如有任何建议,将不胜感激。谢谢。问题是因为证书过期。通过在webView.setWebViewClient(new WebViewClient(){})中添加以下方法,可以很容易地绕过它代码>
此外,为了使用此方法,API级别应为8或更高
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// super.onReceivedSslError(view, handler, error);
Log.e(TAG, "onReceivedSslError...");
Log.e(TAG, "Error: " + error);
handler.proceed();
}