2012-12-19 97 views
5

我正在開發一個javascript/HTML應用程序與jquerymobile,使ajax請求到遠程服務器。該應用程序在Chrome上運行良好(僅在禁用Web安全的情況下啓動Chrome),但是當我將其嵌入到Android應用程序(簡單webview)的assets /目錄中時,遠程Ajax調用失敗。因此我想這可能是一個跨域問題。我知道phonegap沒有這個問題,但我想盡可能不使用phonegap。所以問題是:如何禁用Android webview應用程序中的跨域保護?允許在Android Webview + jQuery的移動遠程AJAX調用

這是活動代碼:

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

而且我已經在我的html頁面設置jquerymobile跨域參數:

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

回答

0

在你AndroidManifest。 xml,你有這條線:

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

謝謝您的回覆做同樣的,我給了這個使用許可權的申請,但問題仍然存在 – sproing

2

我沒有足夠的積分,張貼此作爲一個評論,但是,請看看下面的例子:

ajax working on some Android devices, not in other

具體要求如下基於Chrome的網頁視圖:

webView.getSettings()。setAllowUniversalAccessFromFileURLs(true);

編輯:對不起,我剛剛看到你已經這樣做了 - 我在我的最後測試了這個,它似乎解決了我的問題(通過加載本地鏈接時出現訪問控制允許來源錯誤AJAX)。

4

試試這個

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

我有同樣的問題,我在我的WebViewClient覆蓋shouldInterceptRequest固定它。我攔截ajax調用,並在java中執行。你必須爲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; 
      } 

     } 
    } 

當我inticiate我的WebView,我實例化我WebViewClient

mWebView.setWebViewClient(new MyWebViewClient());