2012-12-19 13 views
5

Zajmuję się tworzeniem aplikacji javascript/HTML z jquerymobile, która wysyła żądania ajax do zdalnego serwera. Aplikacja działa poprawnie w Chrome (tylko uruchamianie chrome z wyłączonymi zabezpieczeniami sieciowymi), ale kiedy ją osadzę w katalogu assets/app aplikacji Android (prosta przeglądarka internetowa), zdalne wywołania ajax nie powiodą się. Tak więc myślę, że może to być problem z wieloma domenami. Jestem świadomy, że phonegap nie ma tego problemu, ale nie chciałbym, jeśli to możliwe, korzystać z phonegapa. Pytanie brzmi: w jaki sposób wyłączyć ochronę w wielu domenach w aplikacji do przeglądania stron internetowych na Androida?Zezwalaj na zdalne wywołania ajaxowe w przeglądarce internetowej Android + jquery mobile

jest to kod aktywny:

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" /> 

I już ustawić parametry domen jquerymobile krzyżowe w moich stronach 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> 

Odpowiedz

0

W swojej AndroidManifest. xml, czy masz tę linię:

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

Dziękuję za odpowiedź, dałem do wniosku Wykorzystuje-zgody, ale problem jest wciąż obecny – sproing

2

nie mam wystarczająco dużo punktów, aby zamieścić to jako komentarz, jednak proszę spojrzeć na następujące:

ajax working on some Android devices, not in other

szczególności następujące wymagane jest oparte na WebViews Chrome:

webView.getSettings(). SetAllowUniversalAccessFromFileURLs (true);

Edycja: przepraszam, właśnie widziałem, że już to robisz - przetestowałem to na moim końcu i wygląda na to, że rozwiązałem mój problem (podczas pobierania łączy lokalnych uzyskiwałam błąd kontroli dostępu ajax).

4

Spróbuj

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

Miałem ten sam problem i naprawiłem go nadrzędnymi shouldInterceptRequest w moim WebViewClient. Przechwytywam wywołanie ajax i robię to w Javie. Musisz zrobić to samo dla metody 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; 
      } 

     } 
    } 

Kiedy inticiate mój webview, ja instanciate mój WebViewClient

mWebView.setWebViewClient(new MyWebViewClient());