2017-10-11 1 views
0

J'ai du code qui est censé manipuler CSS depuis javascript. Cependant, quand je me suis déplacé mon code sur le fichier: // accès dans Android comme cela semble être la méthode recommandée pour l'exécution d'une application Web dans un WebView, je reçois une erreur lorsque le code suivant tente d'exécuter:Comment utiliser javascript pour manipuler CSS à partir d'un fichier local dans WebView

return document.styleSheets[0].cssRules[0].style 

La valeur est "cssRules" est toujours nulle, ce qui est inattendu.

J'ai trouvé this file dans lequel il semble que cela soit dû à un "bug" dans Chromium que les développeurs de Chrome refusent de corriger.

Je me demande si c'est vraiment le bogue que je rencontre et si c'est le cas s'il y a une solution pour cela. Comment est-ce que je peux manipuler le CSS de Javascript dans un WebView en cours d'exécution localement? Devrais-je abandonner l'idée de courir localement? J'ai peur qu'il puisse y avoir d'autres choses comme ça qui vont me mordre.

+0

trouver la solution ici https://stackoverflow.com/questions/4950729/rendering-html-in-a-webview-with-custom-css – Prerna

+0

@Prerna Je ne sais pas si cela fait une différence, mais je stocke actuellement mes actifs dans le répertoire sdcard afin que je puisse le mettre à jour sans avoir à réinstallez mon application encore et encore pour chaque petit changement. – Michael

+0

@Prerna En regardant loadDataWithBaseURL, je ne suis pas sûr que ce soit approprié pour ce cas d'utilisation. J'ai HTML qui charge dynamiquement les fichiers javascript et css et qui crée dynamiquement css. Cette approche apparaît comme si cela nécessitait de casser complètement le fonctionnement de mon application web. – Michael

Répondre

0

Dans mon code, je suis déjà Vocation:

webSettings.setAllowFileAccess(true); 

Mais j'ai découvert que si j'ajouter le code suivant il détend toutes les restrictions de sécurité sur l'accès aux fichiers local et je suis en mesure d'accéder à CSS Javascript:

if (Build.VERSION.SDK_INT >= 16) { 
     webSettings.setAllowFileAccessFromFileURLs(true); 
     webSettings.setAllowUniversalAccessFromFileURLs(true); 
    }