2014-09-04 2 views
1

J'ai une application HTML5 très simple écrite avec trigger.io qui ne fonctionne pas sous Android 4.4 avec des erreurs indiquant que le contenu local est inaccessible. Exemple:Trigger.io Accès aux ressources locales sur Android 4.4

E/AndroidProtocolHandler(2236): Unable to open content URL: content:////io.trigger.forge9aee7db8338b11e4b77d1231392b77b0/src/images/connect4.jpg 

Le même code fonctionne sous Android 4.3. Cela s'applique à tout le contenu local, y compris les images, CSS et JavaScript. Toutes les ressources sont référencées avec des chemins relatifs tels que "images/image.jpg".

Ma meilleure estimation est qu'il y a un changement de politique d'accès dans les nouvelles versions d'Android OS, mais je ne peux pas comprendre les détails. Je me suis assuré que nulle part dans le code tente d'accéder à des ressources externes.

Répondre

1

Il semble qu'à partir de la version 1.3, jQuery Mobile réécrit les URL de votre document, ce qui interrompt l'accès de Chrome Webview aux fichiers du sandbox de l'application.

Vous pouvez essayer le dépôt d'un rapport de bug avec les devs jQuery Mobile, mais pour trier ceci à court terme vos meilleures options sont probablement l'un:

1) revenir à jQuery Mobile 1.2.1

2) Créez une version personnalisée de jQuery Mobile qui exclut certaines fonctionnalités de navigation. (Allez dans le générateur de téléchargement (http://jquerymobile.com/download-builder/), faites défiler jusqu'à "Navigation" et désélectionnez le module "Base Tag")

2

Antoine van Gelder a été incroyablement utile à ce sujet. Son diagnostic était absolument correct: jQuery Mobile réécrit les URL des ressources, ce qui entraîne l'échec des nouvelles versions de Chrome Webview lors de l'accès aux ressources. Les URL générées contiennent des barres obliques quadruple après le protocole comme celui-ci:

contenu: ////io.trigger.forge9aee7db8338b11e4b77d1231392b77b0/src/resource.png

Les barres obliques provoquent Webview échec. Peut-être une vérification excessive de l'exactitude ou une implication de sécurité? Les suggestions d'Antoine concernant l'utilisation d'anciennes versions de jQuery Mobile ou la construction d'un jQuery Mobile personnalisé sans balise de base fonctionneront probablement dans certaines circonstances, mais elles n'étaient pas suffisantes dans mon cas. En particulier, supprimer Base Tag supprime également d'autres fonctionnalités dont j'avais besoin.

Une approche alternative consiste à effectuer un piratage mineur de jQuery Mobile. Pour la version 1.4.3, je l'ai fait ce qui suit:

  • Edité une version non minified du javascript jQuery mobile
  • Modified la fonction getLocation:
    • Enregistrez la valeur de retour à une variable temporaire
    • Modifier la variable temporaire en supprimant quatre barres obliques.
    • J'ai utilisé quelque chose de très spécifique et limité au protocole "content": "retVal = retVal.replace (" content: //// "," content: // ");"
  • Retour la variable temporaire fixe
+0

Allez-vous accepter sa réponse? – Stagleton

0

Cela devrait être fixé jquery mobile 1.4.4.

Questions connexes