Je charge un fichier html local (à partir du dossier des ressources) dans l'application WebView. Dans le HTML, je lance un jQuery.getJSON (url). l'url est un serveur distant.
Cette action échoue et je suppose en raison d'un problème d'origine différent (domaine croisé). J'exécute le même fichier sur chrome et là, il le dit spécifiquement.
Existe-t-il un moyen d'autoriser WebView dans Android pour charger des données à partir d'un serveur distant sur un fichier HTML chargé localement?
Aujourd'hui matin, j'ai trouvé une solution qui semble fonctionner.
Initialisez votre WebView:
WebView _webView = (WebView) this.findViewById(R.id.id_of_your_webview_in_layout);
obtenir les paramètres WebView:
WebSettings settings = _webView.getSettings();
définir les paramètres suivants:
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccessFromFileURLs(true); //Maybe you don't need this rule
settings.setAllowUniversalAccessFromFileURLs(true);
maintenant vous pouvez charger votre fichier html de façon standard:
_webView.loadUrl("file:///Android_asset/www/index.html");
Créer une requête XHR par voie standard
var xhr = new XMLHttpRequest();
xhr.open("get", "http://google.com", false);
xhr.send();
Imprimez le résultat quelque part
document.body.innerHTML = xhr.responseText
AVIS: Cette procédure ne fonctionne que sur le niveau API 16 ou supérieur (au moins la documentation le dit).
N'oubliez pas d'ajouter l'autorisation Internet dans votre fichier manifeste:
<uses-permission Android:name="Android.permission.INTERNET"/>
Assurez-vous également que vous utilisez les requêtes JSONP (n'oubliez pas le & callback =? Comme indiqué ci-dessus)
Je charge un fichier html local (à partir du dossier des ressources) dans l'application WebView
Notez que vous n'avez pas expliqué comment vous procédez. Je vais deviner que c'était par une loadUrl()
sur une URL file:///Android_asset
.
Existe-t-il un moyen d'autoriser WebView dans Android pour charger des données à partir d'un serveur distant sur un fichier HTML chargé localement?
Essayez d'utiliser loadDataWithBaseURL()
pour charger le contenu, en fournissant une URL sur le serveur distant comme URL de base.
Une solution que nous avons utilisée était d'utiliser Android pour obtenir les fichiers de mise à jour depuis le serveur, les placer et écraser les fichiers dans le dossier Web, puis parcourir.
Les appels Ajax ne fonctionneront pas à partir du système de fichiers local. De plus, il deviendra inter-domaines. Donc ça ne marchera pas. Cela a fonctionné dans Eclipse, car vous avez essayé à partir du serveur local.