2012-12-19 31 views
5

Tôi đang phát triển một ứng dụng javascript/HTML với jquerymobile, tạo yêu cầu ajax cho máy chủ từ xa. Ứng dụng hoạt động tốt trên Chrome (chỉ khởi chạy chrome với bảo mật web bị vô hiệu hóa) nhưng khi tôi nhúng nó vào trong tài sản/thư mục của ứng dụng Android (một lần xem web đơn giản), cuộc gọi ajax từ xa không thành công. Vì vậy, tôi đoán nó có thể là một vấn đề tên miền chéo. Tôi biết rằng phonegap không có vấn đề này nhưng tôi không muốn sử dụng phonegap nếu có thể. Vì vậy, câu hỏi đặt ra là: làm thế nào để vô hiệu hóa bảo vệ tên miền chéo trong ứng dụng webview của Android?Cho phép cuộc gọi ajax từ xa trong Android Webview + jquery mobile

này là mã Hoạt động:

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

Và tôi đã thiết lập các thông số miền jquerymobile chéo trong các trang html của tôi:

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

Trả lời

0

Trong AndroidManifest của bạn. xml, bạn có dòng này không:

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

Cảm ơn bạn đã trả lời của bạn, tôi đã cung cấp cho ứng dụng này sử dụng-phép nhưng vấn đề vẫn còn hiện diện – sproing

2

Tôi không có đủ điểm để đăng bài này như một bình luận, tuy nhiên, hãy có một cái nhìn tại như sau:

ajax working on some Android devices, not in other

Cụ thể, sau đây là cần thiết trên WebViews Chrome dựa:

webView.getSettings(). SetAllowUniversalAccessFromFileURLs (true);

Chỉnh sửa: xin lỗi, tôi vừa thấy bạn đang thực hiện việc này - tôi đã thử nghiệm điều này và có vẻ như đã giải quyết được sự cố của tôi (đã gặp phải lỗi truy xuất-cho phép-xuất xứ khi tải liên kết cục bộ qua ajax).

4

Hãy thử điều này

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

tôi đã cùng một vấn đề và tôi cố định nó bằng cách ghi đè shouldInterceptRequest trong WebViewClient tôi. Tôi chặn cuộc gọi ajax và làm điều đó trong java. Bạn cần phải làm như vậy cho các phương pháp 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; 
      } 

     } 
    } 

Khi tôi inticiate webview của tôi, tôi instanciate WebViewClient tôi

mWebView.setWebViewClient(new MyWebViewClient()); 
Các vấn đề liên quan