2009-12-16 10 views
20

Se si dispone di IE8, è possibile che si sia accorta di una funzione davvero utile aggiunta da MS. Hit F12 e Developer Tools, un firebug come debugger, si apre. Questo è estremamente utile per scopi di debug, e mi chiedo se c'è un modo per far apparire lo Developer Tools da un controllo WebBrowser all'interno di un'applicazione .NET.C'è un modo per abilitare gli strumenti di sviluppo IE8 dal controllo WebBrowser in un'applicazione .NET

La mia situazione è questa: ho un'applicazione C# che ha un controllo WebBrowser incorporato. L'app C# e il contenuto del browser Web DHTML comunicano tra loro utilizzando le interfacce ObjectForScripting (lato C) e window.external (lato DHTML), quindi per testare/eseguire il debug/risolvere i problemi della funzionalità completa, ho bisogno di un modo per attivare lo sviluppatore Strumenti dal controllo WebBrowser. Fino ad ora ci siamo limitati a utilizzare Firebug Lite che è severamente limitato o innescare una sessione di debug di step del javascript usando il 'debugger;' js, ma ora stiamo arrivando al punto in cui queste opzioni diventano una vera seccatura e non consentono le funzionalità complete che saremmo riusciti a ottenere a nostra disposizione come Firebug o gli Strumenti per sviluppatori.

Quello che mi piacerebbe davvero fare è essere in grado di far apparire gli Strumenti di sviluppo dal mio controllo WebBrowser mentre l'app è in esecuzione, ma non ho ancora trovato un modo per farlo.

Qualcun altro si è imbattuto in questo problema e ha scoperto se c'è un modo per farlo accadere?

+0

Ne dubito fortemente. –

+0

avevo paura di quello –

risposta

12

No, come altri hanno detto che questo non è possibile. Tuttavia esiste un modo per collegare la maggior parte degli errori della finestra a un gestore personalizzato. Una volta terminato il caricamento del documento, è possibile allegare un listener alla finestra. per esempio.

webBrowser.DocumentCompleted += (o, e) => 
{ 
    webBrowser.Document.Window.Error += (w, we) => 
    { 
     we.Handled = true; 

     // Do something with the error... 
     Debug.WriteLine(
      string.Format(
       "Error: {1}\nline: {0}\nurl: {2}", 
       we.LineNumber, //#0 
       we.Description, //#1 
       we.Url)); //#2 
    }; 
}; 
+1

btw, questo funziona solo con il controllo WebBrowser di WinForms, non con quello di WPF – casaout

+0

@casaout - dovresti essere in grado di utilizzare l'evento 'LoadCompleted' e quindi accedere all'oggetto Window. FWIW non esiste un "browser WPF", è ancora il controllo ActiveX nativo di WebBrowser. – Fraser

3

Credo che gli strumenti di sviluppo siano implementati nell'host IE (iexplore.exe), non nello stesso MSHTML. Ovviamente i ganci ci sono, ma non penso che tu possa arrivare all'interfaccia utente e cose dal controllo.

3

Non esiste un modo per gli host incorporati di utilizzare gli strumenti di sviluppo incorporati. Ma se vuoi eseguire il debug, dovresti comunque essere in grado di allegare visual studio/windbg alla tua app, nel peggiore dei casi potresti inserire breakpoint con la parola chiave "debugger". In VS potresti dover selezionare uno script dal menu "seleziona ..." sotto "esegui il debug di questi tipi di codice".

1

Una possibilità è quella di aprire una finestra figlio dalla pagina embedded, la finestra secondaria si apre in IE e Developer Tools funziona, si può poi fare

window.opener 

nella console per fare riferimento alla genitore e manipolare la pagina.

Oppure sostituire la console genitori con quella del bambino e reindirizzare ad essa.

var logWindow = window.open(); 
     logWindow.document.write('<html><head><title>Child Log Window</title></head>\x3Cscript>window.opener.console = console;\x3C/script><body><h1>Child Log Window</h1></body></html>'); 
     window.onunload = function() { 
      if (logWindow && !logWindow.closed) { 
       logWindow.close(); 
      } 
     }; 
Problemi correlati