Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Allow remote ajax calls in an Android Webview + jquery mobile

I'm developing an javascript/HTML application with jquerymobile which makes ajax requests to a remote server. The application works fine on Chrome (only launching chrome with web security disabled) but when I embed it within the assets/ directory of an Android application (a simple webview) the remote ajax calls fail. Thus I guess it may be a cross domain issue. I'm aware that phonegap does not have this issue but I would like not to use phonegap if possible. So the question is: how do I disable cross domain protection in an Android webview application?

this is the Activity code:

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

And I already set the jquerymobile cross domain parameters in my html pages:

<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>
like image 769
sproing Avatar asked Dec 19 '12 16:12

sproing


2 Answers

I don't have enough points to post this as a comment, however, please have a look at the following:

ajax working on some Android devices, not in other

Specifically, the following is required on Chrome based webViews:

webView.getSettings().setAllowUniversalAccessFromFileURLs(true);

Edit: sorry, I just saw you're already doing this -- I tested this on my end and it seems to have solved my issue (was getting an access-control-allow-origin error when loading local links via ajax).

like image 143
ahash Avatar answered Nov 09 '22 06:11

ahash


Try this

WebView web=(WebView) findViewById(R.id.webView1);
web.getSettings().setJavaScriptEnabled(true);
like image 33
Danyial Shahid Ali Avatar answered Nov 09 '22 06:11

Danyial Shahid Ali