8
votes

Modification de HTML dans un webview Programmatiquement

Je charge une page d'actif HTML dans une vision webview à l'aide de

webMain.loadUrl("file:///android_asset/record.html");


0 commentaires

5 Réponses :


4
votes

Oui, vous pouvez le faire en chargant votre page dans une chaîne, puis chargez cette chaîne dans votre webview.

par exemple: xxx

pris de ici


2 commentaires

Ceci est définitivement une solution, mais fiche.html est un fichier volumineux. Aux fins du maintien du code, je préférerais ne pas refaire la totalité de cette façon.


Malheureusement, je ne pense pas que vous puissiez résoudre ce problème sans convertir votre code HTML dans une chaîne car je ne pense pas qu'il existe un moyen de dire à votre webview de ne mettre à jour que quelques morceaux de HTML à l'intérieur ..



4
votes

En fait, je ne comprends pas pourquoi la taille du fichier d'enregistrement.html affectera la maintenance du code. Lisez la chaîne HTML (à l'aide de la classe de lecteur Java ou de la part du fichier HTML dans l'actif, utilisez la fonction de remplacement avec RegEx pour remplacer tout [Personnalisé] dans le fichier HTML. Combien de temps le HTML ne doit pas vraiment affecter la manière dont vous maintenez le code. Il devrait plutôt être un problème de performance, ou la chaîne est vraiment vraiment longue qui dépasse la limite de chaîne Java.

Certains code que j'ai utilisés avant: xxx

utils est mon classe faisant la conversion en chaîne. Je n'utilise pas Regex ici car je ne remplace que le mot pour une fois. Ensuite, je charge la chaîne comme la catas. C'est assez propre que je suppose.


6 commentaires

Je tiens à le faire de cette façon, car il est plus facile d'apporter des modifications à enregistrer.html qu'à un document Java avec 200 lignes de chaîne concaténée. J'ai essayé ce changement et cela semble me donner les informations correctes, mais quand j'appelle webmain.loaddata (détails, "text / html", null); Il donne une erreur non trouvée. La page que la recherche ne trouve pas se trouve être tout le code dans record.html.


Si vous avez une balise pour la chaîne, je pense que vous devrez peut-être utiliser LOADDATAWITHBASEURL


Cela s'est avéré être la clé. Merci!


Je reçois une erreur ne peut pas être résolu .. Quelle est la bibliothèque d'utils? @Osmman @rets


Pas une bibliothèque, juste ma classe personnalisée qui contient une méthode de commodité pour convertir un lecteur à une chaîne. Fondamentalement, juste une boucle, Ajoutez Reader.Read () à une chaîne.


Existe-t-il un moyen de supprimer toutes les étiquettes de la chaîne ReReRuedue?



15
votes

Il s'agit d'une question ancienne et déjà acceptée, mais je suis sûr que le problème peut être résolu de manière plus élégante en utilisant JavaScript.

Gardez le fichier HTML dans votre dossier d'actifs et surrouler le texte que vous souhaitez remplacer. dans avec des éléments div avec des identifiants uniques. p> xxx pré>

crée maintenant une fonction JavaScript qui remplacera l'innerhtml d'un div avec un ID P>: P>: P> >

WebView helpView = (WebView)findViewById(R.id.helpView);
helpView.getSettings().setJavaScriptEnabled(true);
helpView.setWebViewClient(new WebViewClient() {
  @Override
  public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.loadUrl("javascript:replace('replace1', 'new content 1')");
    view.loadUrl("javascript:replace('replace2', 'new content 2')");
  }
});
helpView.loadUrl("file:///android_asset/help.html");


3 commentaires

Et si mon code html a du texte "{{userername}}} est très bon. {{Userername}} est un programmeur. {{Usergender}} peut développer des super applications aussi" .Je besoin de le remplacer comme - Richard est très bon . Richard est un programmeur. Il peut également développer de superbes applications. Maintenant, dois-je donner 2 identifiants différents pour les deux {{username}} s?


Puis-je donner les mêmes ids aux chaînes similaires / mêmes, car je puisse avoir plusieurs fichiers HTML avec différentes séquences de chaînes et gérer différents identifiants uniques pour les mêmes chaînes seront gênantes.


@DroidWormnarendra Dans ce cas, je suppose que vous utiliseriez la classe au lieu de l'ID.



1
votes

Celui-ci a fonctionné pour moi, avec le HTML avec le texte et les images.

  InputStream is = getAssets().open(html_name);
            int size = is.available();

            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();

            String str = new String(buffer);
            str = str.replace("InitialTextToBeReplaced", "TextAfterReplacement");

       //Now instead of webview.loadURL(""), I needed to do something like -
            webView.loadDataWithBaseURL("file:///android_asset/", str, "text/html", "UTF-8",null);


0 commentaires

4
votes

Ceci est fonctionné pour moi. XXX PRE>

Ceci est code Java. P>

WebView wb = (WebView) findViewById(R.id.webView1); 
wb.loadUrl("file:///android_asset/web1.html");
wb.getSettings().setJavaScriptEnabled(true);

wb.setWebViewClient(new WebViewClient() {

    @Override
    public void onPageFinished(WebView web, String url) {
        // TODO Auto-generated method stub
        String uname = "email@mail.com";
        String pass = "******";

        web.loadUrl("javascript:(function(){document.getElementById('uname').value = '"+uname+"';})()");
        web.loadUrl("javascript:(function(){document.getElementById('pass').value = '"+pass+"';})()");
            
    }
});


2 commentaires

Cette ligne contribuera à changer ma langue choisies réfléchie dans Webview de Android .. merci mec


WB.GetSettings (). SetjavasCrriptenabled (True);