Allow remote ajax calls in an Android Webview + jquery mobile

后端 未结 4 1314
执笔经年
执笔经年 2021-01-02 20:13

I\'m developing an javascript/HTML application with jquerymobile which makes ajax requests to a remote server. The application works fine on Chrome (only launching chrome wi

4条回答
  •  梦毁少年i
    2021-01-02 20:21

    I had the same problem and I fixed it by overriding shouldInterceptRequest in my WebViewClient. I intercept the ajax call and do it in java. You have to do the same for POST methods

    private class MyWebViewClient extends WebViewClient {
            @Override
            public void onPageFinished(WebView webView, String url) {
                Log.d("test", "onPageFinished");
                loadWebViewJavascriptBridgeJs(webView);
            }
    
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView webview, WebResourceRequest webrequest)
            {
                Log.d("test", "shouldInterceptRequest");
               return this.handleRequest(webrequest.getUrl().toString());
            }
    
            @NonNull
            private WebResourceResponse handleRequest(@NonNull String urlString) {
                try {
                    URL url = new URL(urlString);
                    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                    connection.setRequestProperty("User-Agent", "");
                    connection.setRequestMethod("GET");
                    connection.setDoInput(true);
                    connection.connect();
    
                    InputStream inputStream = connection.getInputStream();
                    return new WebResourceResponse("text/json", "utf-8", inputStream);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    return null;
                }
                catch (ProtocolException e) {
                    e.printStackTrace();
                    return null;
                }catch (IOException e) {
                    e.printStackTrace();
                    return null;
                }
    
            }
        }
    

    When I inticiate my webview, I instanciate my WebViewClient

     mWebView.setWebViewClient(new MyWebViewClient());
    

提交回复
热议问题