9
votes

Comment charger HTML dans le contrôle WebBrowser pour WPF?

Mon application client WPF construit une page HTML personnalisée, je peux charger le HTML comme celui-ci,

this.myWebBrowser.NavigateToString("<html><body><p>test page</p></body></html>");


0 commentaires

5 Réponses :


0
votes

Vous le feriez exactement comme avec toutes les autres pages HTML. Les images et CSS seraient référencés par URL, comme avec une autre page HTML. Il n'y a pas de magie ici.


4 commentaires

Mon application génère le HTML, il n'existe pas sur une URL.


Mais comme toutes les autres pages HTML du monde, toutes les images ou CSS doivent être référencées via URL. Il n'y a pas une telle chose qu'une page HTML avec des images embarquées.


Oui, je pense. Avez-vous pensé cela, du tout? Peut-être qu'il est temps d'arrêter et de lire un tutoriel sur HTML?


@Tony: Vraiment, allez lire ce tutoriel HTML. Il répondra à toutes ces questions. La réponse à celle-ci est: ça ne fonctionnera pas.



4
votes

En réalité, une page HTML est une page HTML avec des images embarquées.

Vous pouvez intégrer à la fois des images et des CSS à l'intérieur d'une chaîne HTML, à l'aide du Schéma URI de données . Cependant, toutes les versions de IE ne supportent pas cela et que le contrôle WebBrowser est vraiment, c'est-à-dire. Si votre code pourrait s'exécuter sur une machine avec IE <8, cette approche ne vous aidera pas.

Une autre option serait de stocker vos images et vos CSS en tant que ressources intégrées, écrivez-les sur des fichiers Temp, puis insérez-le des URL absolues aux fichiers TEMP lorsque vous générez votre HTML.


2 commentaires

Un contrôle WebBrowser utilise-t-il toujours le point local, c'est-à-dire ou est-ce que cela est-il compilé dans ma candidature afin qu'il fonctionne toujours, même si le PC ne dispose que d'IE6?


Je suis à peu près sûr qu'il utilise toujours le local c'est-à-dire. Sinon, il serait plus facile d'installer plusieurs versions d'IE sur une seule machine à tester.



1
votes

Puisque vous générez le HTML, vous pouvez définir l'URL de base de tous les scripts / image en générant un élément de base qui pointe quelque part que vous avez le contrôle, comme Fichier: /// URL pointant vers un dossier sur le disque, une URL pointant vers localhost où votre Server Web local écoute (trop d'échantillons de serveur HTTP sur Internet, donc je n'entre pas dans les détails ici) ou votre site Web sur le www.

Lorsque vous naviguez vers une chaîne, le HTML serait rendu dans la même zone d'internet que sur: vide. Selon les paramètres de la zone de sécurité, c'est-à-dire que votre code HTML n'a peut-être pas autorisé à charger des fichiers dans certains endroits (comme des fichiers de script sur l'ordinateur si la page est dans la zone Internet).

Vous pouvez utiliser marque de la bande pour changer la zone Internet de votre page HTML.


0 commentaires

1
votes

Pour la référence, j'ai trébuché sur cette question et utilisé la réponse de Joel Mueller, mais j'ai décidé d'automatiser l'analyse des chemins d'image. Peut-être que quelqu'un trouvera mon code utile pour un démarreur d'une solution similaire - c'est assez rugueux et sale, mais semble bien faire le travail.

J'utilise des ressources C #, dans mes fichiers HTML, je ne mettez que des noms de fichiers d'image. Cela me permet également d'ouvrir le fichier dans un navigateur normal pour tester comment ça va regarder. Le code recherche automatiquement la ressource avec le même nom que le nom de fichier dans le HTML, enregistre-le sous le répertoire de données d'application et remplace le chemin.

Il convient également de noter que l'application écrasera le fichier s'il diffère de l'un déjà sauvé. Il était principalement nécessaire pour le développement, mais je n'avais pas vraiment eu beaucoup de ces fichiers, donc je me suis préoccupé par la perte de performance ici. Omission de cette vérification et en supposant que les fichiers soient à jour doivent améliorer les performances.

paramètres.default.applicationID est une chaîne simple avec un nom d'application, utilisé pour le répertoire. Nom à l'intérieur des données d'application.

Voilà comment ma classe a fini par regarder: xxx

Veuillez noter que le fonctionnement de ByTeArrayCompare utilise uniquement MEMCMP uniquement pour des raisons de performances, mais elle peut Soyez facilement substitué par une simple boucle de comparaison.

Alors, je viens d'appeler navigateur.navigatetostring (myhtmlimageMedder.gethtml ()); .


0 commentaires

-2
votes
<WebBrowser Height="200" Name="myWebBrowser"></WebBrowser>
myWebBrowser.NavigateToString("EnterHtmlString");

1 commentaires

Comment cela répond-il à la question? Il utilise déjà NAVIGATETOSTRING et je doute que "Enterhtmlstring" résout le problème avec les fichiers CSS et image.