sum*_*mit 79 https android webview android-webview
public void onCreate(Bundle savedInstance)
{
super.onCreate(savedInstance);
setContentView(R.layout.show_voucher);
webView=(WebView)findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);
String url ="https://www.paymeon.com/Vouchers/?v=%C80%8D%B1x%D9%CFqh%FA%84%C35%0A%1F%CE&iv=%25%EE%BEi%F4%DAT%E1"
//webView.loadUrl(url); // Not Working... Showing blank
webView.loadUrl("http://www.yahoo.com"); // its working
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在WebBView中加载URL时,它只显示一个空白屏幕.如果我加载Google.com或yahoo.com,它运行正常.
far*_*ath 145
将此覆盖方法添加到WebViewClient实现中.您需要使用Android SDK 2.2(API级别8)或更高版本进行编译.该方法在2.2(API级别8)的公共SDK中出现,但我们已经在运行2.1,1.6和1.5的设备上进行了测试,并且它也可以在这些设备上运行(显然行为一直存在).
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
Run Code Online (Sandbox Code Playgroud)
这会对你有所帮助.
rob*_*ick 45
根据fargth的正确答案,以下是一个可能有用的小代码示例.
首先,创建一个扩展WebViewClient的类,并将其设置为忽略SSL错误:
// SSL Error Tolerant Web View Client
private class SSLTolerentWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用Web视图对象(在OnCreate()方法中启动),将其Web视图客户端设置为覆盖类的实例:
mWebView.setWebViewClient(
new SSLTolerentWebViewClient()
);
Run Code Online (Sandbox Code Playgroud)
Ana*_*hah 34
要根据新的安全策略正确处理SSL证书验证并避免Google拒绝应用程序,只要服务器提供的证书符合您的期望,就更改您的代码以调用SslErrorHandler.proceed(),否则调用SslErrorHandler.cancel().
例如,我添加了一个警告对话框,以便用户确认并且Google似乎不再显示警告.
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted.";
break;
case SslError.SSL_EXPIRED:
message = "The certificate has expired.";
break;
case SslError.SSL_IDMISMATCH:
message = "The certificate Hostname mismatch.";
break;
case SslError.SSL_NOTYETVALID:
message = "The certificate is not yet valid.";
break;
}
message += " Do you want to continue anyway?";
builder.setTitle("SSL Certificate Error");
builder.setMessage(message);
builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
}
Run Code Online (Sandbox Code Playgroud)
更改后,它不会显示警告.
Kin*_*ses 10
删除它将起作用的下面的代码
super.onReceivedSslError(view, handler, error);
Run Code Online (Sandbox Code Playgroud)
覆盖onReceivedSslError并删除
super.onReceivedSslError(视图,处理程序,错误)
并解决Google安全问题:
setDomStorageEnabled(true);
完整的代码是:
webView.enableJavaScript();
webView.getSettings().setDomStorageEnabled(true); // Add this
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// DO NOT CALL SUPER METHOD
super.onReceivedSslError(view, handler, error);
}
});
Run Code Online (Sandbox Code Playgroud)
复制并粘贴您的代码行兄弟,它会工作相信我:) 我在想,您收到了 ssl 错误。?如果您使用覆盖 onReceivedSslError 方法并删除 super 它的 super 方法。只需编写 handler.proceed() ,错误就会解决。
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
activity.setTitle("Loading...");
activity.setProgress(progress * 100);
if (progress == 100)
activity.setTitle(getResources().getString(R.string.app_name));
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.d("Failure Url :" , failingUrl);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
Log.d("Ssl Error:",handler.toString() + "error:" + error);
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setDomStorageEnabled(true);
webView.loadUrl(Constant.VIRTUALPOS_URL + "token=" + Preference.getInstance(getContext()).getToken() + "&dealer=" + Preference.getInstance(getContext()).getDealerCode());
Run Code Online (Sandbox Code Playgroud)
我遵循了上面的答案,但似乎仍然对我不起作用,下面的代码在集成通常是 https 请求的支付网关时对我做了一个技巧:
public class MainActivity extends Activity {
WebView webView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView1);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
webView.setWebViewClient(new MyWebViewClient());
String postData = "amount=1000&firstname=mtetno&email=mttee@gmail.com&phone=2145635784&productinfo=android&surl=success.php"
+ "&furl=failure.php&lastname=qwerty&curl=dsdsd.com&address1=dsdsds&address2=dfdfd&city=dsdsds&state=dfdfdfd&"
+ "country=fdfdf&zipcode=123456&udf1=dsdsds&udf2=fsdfdsf&udf3=jhghjg&udf4=fdfd&udf5=fdfdf&pg=dfdf";
webView.postUrl(
"http://host/payment.php",
EncodingUtils.getBytes(postData, "BASE64"));
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
return true;
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
handler.proceed();
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在 webview 中执行 post 请求并重定向到支付网关。
设置settings.setDomStorageEnabled(true);对我有用 希望这会有所帮助。
要处理SSL,请从WebViewClient类获取方法 onReceivedSslError(),这是一个示例:
webview.setWebViewClient(new WebViewClient() {
...
...
...
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted.";
break;
case SslError.SSL_EXPIRED:
message = "The certificate has expired.";
break;
case SslError.SSL_IDMISMATCH:
message = "The certificate Hostname mismatch.";
break;
case SslError.SSL_NOTYETVALID:
message = "The certificate is not yet valid.";
break;
}
message += "\"SSL Certificate Error\" Do you want to continue anyway?.. YES";
handler.proceed();
}
});
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看我的完整示例:https: //github.com/Jorgesys/Android-WebView-Logging
要解决Google安全问题,请执行以下操作:
顶行:
import android.webkit.SslErrorHandler;
import android.net.http.SslError;
Run Code Online (Sandbox Code Playgroud)
码:
class SSLTolerentWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
if (error.toString() == "piglet")
handler.cancel();
else
handler.proceed(); // Ignore SSL certificate errors
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113019 次 |
| 最近记录: |