web-dev-qa-db-fra.com

Charger un fichier HTML local dans un navigateur Web C #

Dans mon application, j'ai un élément WebBrowser.

Je voudrais charger un fichier local dedans.

J'ai quelques questions:

  1. Où placer le fichier HTML (pour qu'il soit également installé si un utilisateur exécute la configuration)
  2. comment référencer le fichier? (par exemple, je suppose que le dossier d'installation de l'utilisateur ne serait pas toujours le même)

MODIFIER

J'ai ajouté le fichier HTML à mon projet.

Et je l'ai configuré pour qu'il soit copié dans le dossier de sortie.

Quand je le vérifie, il est présent à l'exécution:\bin\Debug\Documentation\index.html

Cependant, lorsque je fais ce qui suit, je reçois une erreur «La page ne peut pas être affichée» dans l'élément navigateur Web.

J'utilise le code suivant pour essayer d'afficher le fichier HTML dans le navigateur Web.

webBrowser1.Navigate(@".\Documentation\index.html");
50
PeeHaa
  1. Faites un clic droit-> propriétés sur le fichier dans Visual Studio. 
  2. Définissez Copier dans le répertoire de sortie sur Copier toujours.

Ensuite, vous pourrez référencer vos fichiers en utilisant un chemin tel que @".\my_html.html"

Copier dans le répertoire de sortie placera le fichier dans le même dossier que vos dll binaires lors de la construction du projet. Cela fonctionne avec n'importe quel fichier de contenu, même s'il se trouve dans un sous-dossier.

Si vous utilisez un sous-dossier, celui-ci sera également copié dans le dossier bin afin que votre chemin soit alors @".\my_subfolder\my_html.html"

Pour créer un URI que vous pouvez utiliser localement (au lieu de serveur via le Web), vous devez utiliser le protocole file, en utilisant le répertoire de base de votre binaire - note: cela ne fonctionnera que si vous définissez Copier dans le répertoire Ouptut comme ci-dessus ou le chemin ne sera pas correct.

Voici ce dont vous avez besoin:

string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Url = new Uri(String.Format("file:///{0}/my_html.html", curDir));

Vous devrez bien sûr changer les variables et les noms.

85
ghostJago

assez tard, mais c'est le premier coup que j'ai trouvé de google

Au lieu d'utiliser le répertoire en cours ou d'obtenir l'assembly, utilisez simplement la propriété Application.ExecutablePath

//using System.IO;  
string applicationDirectory = Path.GetDirectoryName(Application.ExecutablePath);
string myFile = Path.Combine(applicationDirectory, "Sample.html");
webMain.Url = new Uri("file:///" + myFile);
12
mickeymicks

Notez que le schéma file:/// ne fonctionne pas sur le framework compact, du moins pas avec la version 5.0.

Vous devrez utiliser les éléments suivants:

string appDir = Path.GetDirectoryName(
    Assembly.GetExecutingAssembly().GetName().CodeBase);
webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html"));
5
Brett Ryan
  1. Référencez-le par rapport au répertoire actuel lors de l'exécution de votre application.
  2. Reference it relative to the current directory when your app runs.
4
Jan
  1. Quelque part, près de l'Assemblée, vous allez courir.
  2. Utilisez la réflexion pour obtenir le chemin d'accès à votre Assemblée en cours d'exécution, puis faites un peu de magie pour localiser votre fichier HTML.

Comme ça:

var myAssembly = System.Reflection.Assembly.GetEntryAssembly();
var myAssemblyLocation = System.IO.Path.GetDirectoryName(a.Location);
var myHtmlPath = Path.Combine(myAssemblyLocation, "my.html");
3
Andrey Agibalov

Mise à jour sur la réponse de @ghostJago ci-dessus 

pour moi, cela a fonctionné comme les lignes suivantes dans VS2017

string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Navigate(new Uri(String.Format("file:///{0}/my_html.html", curDir)));
1
Nouman Bhatti

Windows 10 uwp application.

Essaye ça:

webview.Navigate(new Uri("ms-appx-web:///index.html"));
0
Ravshanbek Ahmedov

Ce qui a fonctionné pour moi était 

<WebBrowser Source="pack://siteoforigin:,,,/StartPage.html" />

de ici . J'ai copié StartPage.html dans le même répertoire de sortie que le fichier xaml et il l'a chargé à partir de ce chemin relatif. 

0
Alexander Pacha