2012-12-19 12 views
5

Sto sviluppando un'applicazione javascript/HTML con jquerymobile che fa richieste ajax a un server remoto. L'applicazione funziona bene su Chrome (solo l'avvio di Chrome con la sicurezza Web disabilitata) ma quando lo incorporo all'interno della directory assets/di un'applicazione Android (una semplice webview) le chiamate ajax remote falliscono. Quindi immagino possa trattarsi di un problema interdominio. Sono consapevole del fatto che PhoneGap non ha questo problema, ma mi piacerebbe non usare phonegap se possibile. Quindi la domanda è: come disabilitare la protezione interdominio in un'applicazione webview Android?Consenti chiamate ajax remote in una Webview Android + jquery mobile

Questo è il codice di attività:

public class Moby extends Activity { 

@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_moby); 

    WebView mbrowser = (WebView) findViewById(R.id.webView1); //get the WebView from the layout XML 
    if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) 
     mbrowser.getSettings().setAllowUniversalAccessFromFileURLs(true); 
    //mbrowser.setWebChromeClient(new WebChromeClient()); 
    mbrowser.setWebViewClient(new WebViewClient()); 
    mbrowser.loadUrl("file:///android_asset/index.html"); //set the HTML 
    WebSettings settings = mbrowser.getSettings(); 
    settings.setJavaScriptEnabled(true); 
} 

}

<uses-permission android:name="android.permission.INTERNET" /> 

E ho già impostato i parametri di dominio jquerymobile incrociati nelle mie pagine html:

<script src="script/jquery-1.8.2.js"></script> 
<script> 
$(document).bind("mobileinit", function(){ 
$.support.cors = true; 
$.mobile.allowCrossDomainPages = true;  
}); 
</script> 
<script src="script/jquery.mobile-1.2.0.js"></script> 

risposta

0

Nella tua AndroidManifest. xml, hai questa linea:

<uses-permission android:name="android.permission.INTERNET" /> 
+2

Grazie per la risposta, ho dato alla domanda di questo usa-permesso, ma il problema è ancora presente – sproing

2

non ho abbastanza punti per inviare questo come un commento, tuttavia, si prega di dare un'occhiata al seguente:

ajax working on some Android devices, not in other

In particolare, è necessario quanto segue sul visualizzazioni basati Chrome:

webView.getSettings(). SetAllowUniversalAccessFromFileURLs (true);

Modifica: scusate, ho appena visto che lo state già facendo - l'ho provato da parte mia e sembra aver risolto il mio problema (stava ottenendo un errore di accesso-controllo-permesso-autorizzazione durante il caricamento dei collegamenti locali tramite ajax).

4

Prova questa

WebView web=(WebView) findViewById(R.id.webView1); 
web.getSettings().setJavaScriptEnabled(true); 
0

Ho avuto lo stesso problema e ho riparato ridefinendo shouldInterceptRequest nella mia WebViewClient. Intercetto la chiamata ajax e la faccio in java. Devi fare la stessa cosa per i metodi POST

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; 
      } 

     } 
    } 

Quando ho inticiate mia WebView, ho instanciate mia WebViewClient

mWebView.setWebViewClient(new MyWebViewClient()); 
Problemi correlati