2012-12-19 43 views
5

में अनुमति दें मैं jquerymobile के साथ एक जावास्क्रिप्ट/एचटीएमएल एप्लीकेशन विकसित कर रहा हूं जो रिमोट सर्वर पर AJAX अनुरोध करता है। एप्लिकेशन क्रोम पर ठीक काम करता है (केवल वेब सुरक्षा अक्षम के साथ क्रोम लॉन्च करता है) लेकिन जब मैं इसे एंड्रॉइड एप्लिकेशन (एक साधारण वेबव्यू) की संपत्ति/निर्देशिका में एम्बेड करता हूं तो दूरस्थ AJAX कॉल विफल हो जाती है। इस प्रकार मुझे लगता है कि यह एक क्रॉस डोमेन मुद्दा हो सकता है। मुझे पता है कि फोनगैप में यह समस्या नहीं है लेकिन यदि संभव हो तो मैं फोनगैप का उपयोग नहीं करना चाहता हूं। तो सवाल यह है कि मैं एंड्रॉइड वेबव्यू एप्लिकेशन में क्रॉस डोमेन सुरक्षा कैसे अक्षम करूं?एंड्रॉइड वेबव्यू + रिमोट एजेक्स कॉल्स को एंड्रॉइड वेबव्यू + jquery मोबाइल

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 में

इस

अभ्यास कोड है। एक्सएमएल, क्या आपके पास यह लाइन है:

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

अपने जवाब के लिए धन्यवाद के लिए एक ही करना है, मैं-उपयोग करता अनुमति इस आवेदन लेकिन समस्या को दे दिया अभी भी मौजूद है – sproing

2

मैं एक टिप्पणी के रूप में इस पोस्ट करने के लिए पर्याप्त अंक नहीं है, तथापि, कृपया निम्न पर एक नजर है:

ajax working on some Android devices, not in other

विशेष रूप से, निम्नलिखित क्रोम आधारित WebViews पर आवश्यक है:

webView.getSettings()। SetAllowUniversalAccessFromFileURLs (सत्य);

संपादित करें: क्षमा करें, मैंने देखा है कि आप पहले से ही ऐसा कर रहे हैं - मैंने इसे अपने अंत में परीक्षण किया और ऐसा लगता है कि मेरी समस्या हल हो गई है (स्थानीय लिंक को लोड करते समय एक्सेस-कंट्रोल-अनुमति-मूल त्रुटि प्राप्त हो रही थी ajax)।

4

इस

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

मैं एक ही समस्या थी की कोशिश करो और मैं अपने WebViewClient में shouldInterceptRequest अधिभावी द्वारा यह तय की। मैं AJAX कॉल को रोकता हूं और इसे जावा में करता हूं। आप पोस्ट तरीकों

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, मैं अपने WebViewClient instanciate

mWebView.setWebViewClient(new MyWebViewClient()); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^