web-dev-qa-db-fra.com

WebView Javascript cross domain à partir d'un fichier HTML local

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?

28
oriharel

Aujourd'hui matin, j'ai trouvé une solution qui semble fonctionner.

La partie Java

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");

La partie Javascript

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

53
Stepan Vrany

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)

2
breez

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.

0
CommonsWare

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.

0
Cyberience

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.

0
Prem