2016-11-23 3 views
1

Я загружаю веб-сайт в веб-браузере, мы использовали Ajax на веб-сайте и его работу отлично на веб-браузере и в мобильном браузере, но в Android-браузере ajax не работает. Вот мой код: -Ajax не работает в android webview

public class Activity_WebView extends AppCompatActivity implements 
ConnectivityReceiver.ConnectivityReceiverListener { 
WebView webview; 
ProgressDialog pro_dialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_web_view); 

    webview = (WebView) findViewById(R.id.webview); 
    webview.getSettings().setPluginState(WebSettings.PluginState.ON); 
    webview.setWebViewClient(new loadinsame()); 
    pro_dialog = new ProgressDialog(Activity_WebView.this); 
    webview.getSettings().setJavaScriptEnabled(true); 
    webview.getSettings().setDomStorageEnabled(true); 
    webview.getSettings().setAllowUniversalAccessFromFileURLs(true); 

    boolean connection = checkConnection(); 
    if (connection) { 
     webview.loadUrl("website url"); 
    } else { 
     Toast.makeText(Activity_WebView.this, "Sorry! Not connected to 
     internet", Toast.LENGTH_SHORT).show(); 
     dialog_Show(webview, "Please check you Inernet connect and Reload.", 
     false); 
    } 
} 

@Override 
public void onNetworkConnectionChanged(boolean isConnected) { 
    if (!isConnected) { 
     Toast.makeText(Activity_WebView.this, "Sorry! Not connected to 
     internet", Toast.LENGTH_SHORT).show(); 
    } 
} 

private class loadinsame extends WebViewClient { 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
     pro_dialog.setCancelable(false); 
     pro_dialog.setMessage("Loading..."); 
     pro_dialog.show(); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
     return true; 
    } 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     pro_dialog.dismiss(); 

    } 

    @Override 
    public void onReceivedError(final WebView webview, WebResourceRequest 
    request, WebResourceError error) { 
     super.onReceivedError(webview, request, error); 
     pro_dialog.dismiss(); 
     // dialog_Show(webview, "Error Occur, Do you want to Reload?", true); 

    } 
} 

@Override 
public void onBackPressed() { 

    if (webview.canGoBack()) { 
     webview.goBack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

private boolean checkConnection() { 
    boolean isConnected = ConnectivityReceiver.isConnected(); 
    return isConnected; 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    MyApplication.getInstance().setConnectivityListener(this); 
} 
} 

, когда я проверить веб-сайт в хроме с помощью эмулятора, найти, что мой Аякс остается в ожидании, а затем отменить через некоторое время. Спасибо заранее.

ответ

2

перехватывать АЯКС призыв перекрывая shouldInterceptRequest такой способ:

private class LoadInSame extends WebViewClient { 
    @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; 
     } 

    } 
} 

Просьба также следовать соглашениям JAVA именовании.

+0

Спасибо, что ответили, но когда я добавил этот код в свое приложение, тогда весь код отображается в webview. – Pawanpreet

+0

@Pawanpreet, вы смогли это решить? – Tasneem

+0

да, разрешено – Pawanpreet