2009-08-10 7 views
8

Ho una risorsa HTML incorporata (helloworld.htm) all'interno del mio progetto Visual Studio. (Vale a dire, ho aggiunto un file HTML al progetto e impostare le proprietà di "embedded risorse".MS WebBrowser + risorsa HTML incorporata + res: // Protocollo

all'interno della stessa applicazione ho un controllo WebBrowser.

mi piacerebbe dirigere il controllo WebBrowser per visualizzare la risorsa HTML usando il res:// protocol.

Ma io non riesco a capire il formato esatto necessario per affrontare una risorsa incorporata con questo stile di URL.

Tutte le idee? Grazie!

+0

Ho già funzionato in precedenza, ma ho dimenticato il formato per l'URL w/res: // protocollo. – user144051

+1

Eventuali aggiornamenti ci sono? –

risposta

2
res://project.exe/helloworld.htm 
0
webBrowser1.DocumentText = ResourceinWebBrowser.Properties.Resources.HTML.ToString(); 

Dove:

  • webBrowser1 è il WebBrowser controllo
  • ResourceinWebBrowser è il vostro exe/Nome progetto.
  • HTML è il nome della risorsa HTML incorporato
11

So che questa discussione è morto, ma ho dovuto farlo ieri e non ha potuto ottenere uno di questi metodi per lavorare. Così ho fatto una piccola ricerca e ho trovato il metodo seguente, usando la classe Stream. Ho pensato di postare qui nel caso in cui qualcun altro corre nella stessa assurdità:

Stream docStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("NameSpace.HTMLPage.html"); 
WebBrowser.DocumentStream = docStream; 

questo ha lavorato per me senza ritocchi, ed è stato così semplice. Spero che benefici a qualcun altro!

+0

In qualche modo VLC ActiveX non funziona in questo modo ... http: //stackoverflow.com/questions/14749242/vlc-activex-in-a-local-webpage-with-wpf-webbrowser-control –

6

Il protocollo res: non è guasto ed è ancora un ottimo modo per incorporare pagine Web in applicazioni Windows utilizzando un controllo WebBrowser. Sfortunatamente, mi sembra che ci siano due tipi di risorse in file exe e dll: risorse C e risorse .net. Potrebbe essere possibile incorporare le risorse C in una .net dll ma non ho ancora capito come farlo.

Per rispondere alla tua domanda, il protocollo res è documentato allo here ma in realtà la costruzione della dll o exe è la parte difficile. Il protocollo res è abbastanza semplice. L'essenza di base è che si specifica res: //, seguito dal percorso dell'eseguibile o dll (solo il nome della DLL se si trova nel percorso corrente). Per le risorse di tipo HTML, segui questo con il nome del file. Ecco un recente articolo di MSDN che parla di alcuni problemi noti con il protocollo res: http://support.microsoft.com/kb/220830.

Costruire le risorse DLL o exe può essere un po 'complicato. Per risultati più facili, crea tutte le tue risorse di tipo HTML (anche i tuoi file .js, .png, .jpg). Anziché denominare le risorse con un identificatore di risorse #definito, i file di ricerca moderni consentono di denominare i file con una stringa. Fare questo renderà la tua vita molto più facile.

Suggerimento avanzato: Avere nomi di cartelle nel nome della risorsa è complicato; Non l'ho ancora capito. Penso che potresti essere in grado di simulare le cartelle inserendo le barre nel nome della risorsa, ma penso che il protocollo res venga confuso dalle barre che pensano che la prima parte del percorso sia il tipo di risorsa. Specificando esplicitamente il tipo di risorsa si può alleviare questo.

Avanzato Suggerimento 2: Per il percorso versioni più recenti di Internet Explorer in grado di affrontare con il carattere '\', ma è possibile utilizzare '% 5C' come un sostituto per '\' se è necessario specificare l'assoluta o relativa posizione della dll o exe.

risorse aggiuntive:
MSDN Social: Webbrowser and res: protocol
DelphiDabbler: How to create and use HTML resource files

+0

questo è il migliore risposta, ora sono a conoscenza della limitazione del protocollo res perché non posso impostare il tipo mime in modo programmatico per i file .mht – dns

1

Questa è la piccola classe di supporto e come chiamarlo:

come chiamare:

StreamResourceInfo info = 
    ResourceHelper.GetResourceStreamInfo(@"Resources/GraphicUserGuide.html"); 
if (info != null) 
{ 
    WebBrowser.NavigateToStream(info.Stream); 
} 

classe Helper:

0

Il modo più semplice, forse non il più sicuro o più sano, è avere una variabile Impostazioni che compone la pagina Web di base, posizionare i propri tag marker in SOSTITUISCI quando si eseguono lo streaming delle stringhe nei pacchetti. In questo modo, una volta completate le porzioni non dinamiche della pagina Web, è necessario eseguire il rendering delle porzioni dinamiche su SOSTITUISCI nella stringa. Quindi imposta DoumentText = stringWebStream. Assicurati di impostare AllowNavigation = True.

0

So che è stato chiesto molto tempo fa, ma here's how IE interpreta il res: protocollo:

res: // sFile [/ sType]/sID

sFile Percorso e nome del file con codifica percentuale del modulo che contiene la risorsa.

sType Opzionale. Tipo di risorsa stringa o numerico. Questa può essere una risorsa personalizzata o uno dei tipi di risorsa predefiniti che sono riconosciuti dalla funzione FindResource. Se viene specificato un tipo di risorsa numerica , il numero dell'identificatore deve seguire un carattere # . Se questo parametro non viene specificato, il tipo di risorsa predefinito è RT_HTML o RT_FILE.

sID Identificatore di stringa o numerico della risorsa. Se viene specificato un identificatore numerico, il numero effettivo dell'identificatore, non lo stesso identificatore , deve seguire un carattere #. Vedere l'esempio per ulteriori informazioni .