表单提交后,WebView 未加载页面

Posted

技术标签:

【中文标题】表单提交后,WebView 未加载页面【英文标题】:WebView not loading page, after form submit 【发布时间】:2017-09-24 12:25:02 【问题描述】:

希望通过 WebView link 的组件解决我在使用 React Native 时遇到的问题,我在 android 中进行了直接测试,在尝试加载特定页面时获得了相同的错误。

第一页包含一个表单,但是输入用户数据并提交后,并没有显示下一页,它只显示“正在加载...”的消息

这是我的安卓代码:

public class WebViewActivity extends Activity 

private WebView webView;

public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview_main);

    webView = (WebView) findViewById(R.id.webView1);
    webView.clearCache(true);
    webView.setWebViewClient(new WebViewClient());
    webView .getSettings().setjavascriptEnabled(true);
    webView .getSettings().setDomStorageEnabled(true);
    webView.loadUrl("https://auth.mercadopago.com.ve/authorization?client_id=6012820321480442&response_type=code&platform_id=mp&redirect_uri=https%3A%2F%2Fus-central1-quicpyapp.cloudfunctions.net%2FmercadoPagoConnect%3FuserId%3DcljvLoUJNoOHfe636ofMHduXu2o2");


如果我评论以下行,我还能够观察到页面正常工作:

//webView.setWebViewClient(new WebViewClient());

测试用户数据如下:"user": "TETE5691798", "password": "qatest6094"

任何帮助将不胜感激。

【问题讨论】:

你需要在 webview 上显示登录屏幕吗? 我需要显示那个登录屏幕,以获得第三方 API 的授权,他们在用户登录后显示另一个屏幕,用户必须确认授权,但下一个屏幕永远不会显示,至少我评论了我在问题中指定的代码行。 【参考方案1】:

通过添加onReceivedHttpAuthRequest(),它会自动验证您的网站。试试下面的代码:

      mWebView.setWebViewClient(new WebViewClient() 
            @Override
            public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) 
                mWebView.setHttpAuthUsernamePassword(host, realm, YOUR_USER_NAME, YOUR_PASSWORD);
                handler.proceed(YOUR_USER_NAME, YOUR_PASSWORD);
            

      

【讨论】:

问题是不能登录,问题是登录后从不显示下一页,它停留在无限循环试图加载下一页并且只显示单词“Loading .. 。”【参考方案2】:

试试这个解决方案:

var currentUrl = "google.com" 
var partOfUrl = currentUrl.substring(0, currentUrl.length-2)

webView.setWebViewClient(object: WebViewClient() 

 override fun onLoadResource(WebView view, String url) 
 //call loadUrl() method  here 
 // also check if url contains partOfUrl, if not load it differently.
 if(url.contains(partOfUrl, true)) 
     //it should work if you reach inside this if scope.
  else if(!(currentUrl.startWith("w", true))) 
     webView.loadurl("www.$currentUrl")

  else if(!(currentUrl.startWith("h", true))) 
     webView.loadurl("https://$currentUrl")

  else  
  //...
 


 

 override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) 
// you can call again loadUrl from here too if there is any error.

//You should also override other override method for error such as onReceiveError to see how all these methods are called one after another and how they behave while debugging with break point. 
 

【讨论】:

以上是关于表单提交后,WebView 未加载页面的主要内容,如果未能解决你的问题,请参考以下文章

文档准备好后通过 Ajax 加载的 Rails 远程表单未提交

提交表单后正确刷新页面

提交表单后如何使用模态重新加载页面

表单提交后如何防止页面重新加载 - JQuery

表单提交后防止页面重新加载

WordPress 插件表单未提交