2012-08-29 11 views
9

Possiedo un'applicazione che scrive HTML in un controllo WebBrowser in un'applicazione Winforms .NET.Come è possibile rilevare a livello di programmazione se javascript è abilitato/disabilitato in un'applicazione desktop di Windows? (Controllo WebBrowser)

Voglio rilevare in qualche modo in modo programmatico se le impostazioni Internet hanno JavaScript (o Active Scripting piuttosto) disabilitato.

Suppongo che sia necessario utilizzare qualcosa come WMI per interrogare le impostazioni di sicurezza di IE.

EDIT # 1: È importante sapere se javascript è abilitato prima di visualizzare l'HTML, quindi le soluzioni che modificano il DOM per visualizzare un avviso o che utilizzano tag non sono applicabili nel mio caso particolare. Nel mio caso, se javascript non è disponibile visualizzerò il contenuto in un RichTextBox nativo e voglio anche segnalare se JS è abilitato di nuovo all'applicazione server in modo che possa dire all'amministratore che invia avvisi che il 5% o il 75% degli utenti hanno abilitato JS o meno.

+0

Spero che tu abbia già controllato questo? - http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/07df5263-613c-4780-89a2-67ebf2a1e670 – NinethSense

+0

@ blak3r controlla la mia risposta, risolverà i tuoi problemi. –

+0

@ Erx_VB.NExT.Coder Grazie per la buona risposta. Avevi 5 ore di ritardo in più:/La risposta che ho postato ha lo stesso approccio che hai definito per controllare il registro. Hai fatto +1 sulla tua risposta per completezza. – blak3r

risposta

5

Grazie a @ suggerimento di Kickaha. Ecco un semplice metodo che controlla il registro per vedere se è impostato. Probabilmente alcuni casi in cui questo potrebbe generare un'eccezione, quindi assicurati di gestirli.

const string DWORD_FOR_ACTIVE_SCRIPTING = "1400"; 
    const string VALUE_FOR_DISABLED = "3"; 
    const string VALUE_FOR_ENABLED = "0"; 

    public static bool IsJavascriptEnabled() 
    { 
     bool retVal = true; 
     //get the registry key for Zone 3(Internet Zone) 
     Microsoft.Win32.RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3", true); 

     if (key != null) 
     { 
      Object value = key.GetValue(DWORD_FOR_ACTIVE_SCRIPTING, VALUE_FOR_ENABLED); 
      if(value.ToString().Equals(VALUE_FOR_DISABLED)) 
      { 
       retVal = false; 
      } 
     } 
     return retVal; 
    } 

Nota: nell'interesse di tenere questo breve esempio di codice (e perché mi interessava solo la zona Internet) - questo metodo controlla solo la zona Internet. È possibile modificare il 3 alla fine della riga OpenSubKey per cambiare la zona.

1

Ecco un suggerimento: codifica l'avviso nella pagina Web come impostazione predefinita. Crea un javascript che viene eseguito al caricamento della pagina che rimuove quell'elemento. L'avviso sarà presente quando mai javascript non è autorizzato a funzionare.

È passato molto tempo da quando ho codificato il codice HTML lato client per interagire con il DOM, quindi potrei essere un po 'obsoleto. Dovrai correggere i dettagli, ma spero di avere un'idea generale.

<script> 
document.getElemntByID("noJavascriptWarning").innerHTML=""; 
</script> 

e nel vostro corpo HTML

<DIV id="noJavascriptWarning" name="noJavaScriptWarning">Please enable Javascript</DIV> 
+0

Questo è un buon suggerimento per alcune persone. Ma, ho ulteriori motivi che richiedono che io sappia se javascript è abilitato prima di visualizzare HTML. A) Voglio segnalare questo a un server per avvisare un amministratore ... e B) se javascript non è abilitato, visualizzo il contenuto in un formato nativo. – blak3r

+0

Ho trovato questo commento altrove in SO, sull'impostazione di un cookie e ha senso. Stavo pensando ad una soluzione forzata di un iFrame nascosto che puoi caricare altre pagine dal server (che ti permette di inviare informazioni al server nella stringa di query .. se ricordo bene ...) "There isn ' è un buon modo per eseguire il rilevamento di JavaScript sul lato server, invece di utilizzare JavaScript per impostare un cookie e quindi testare quel cookie utilizzando lo scripting sul lato server nelle successive visualizzazioni di pagina, distribuire il contenuto in modo appropriato. " Ti costerà un aggiornamento iniziale della pagina o il reindirizzamento .. – Kickaha

+0

yep non può fare validazione javascript lato server ... quando si tratta di pagine web. Ho un'applicazione diversa in cui sto visualizzando i messaggi all'utente. Dal momento che ho un'app desktop, dovrei essere in grado di rilevare questo e dire al server. La tua soluzione suggerita usando i cookie è un altro buon suggerimento ma sembra un modo più difficile di farlo, allora dovrebbe essere. Inoltre, non dice alla mia app desktop se javascript è abilitato senza eseguire una richiesta Web sul server isJavascriptEnabled? in qualcosa al di fuori del webcontrol. – blak3r

2

Se si verificano problemi con popup, ho incluso una soluzione per te e se vuoi disabilitare/abilitare javascript sul computer client (o anche solo leggere/query se è abilitato/disabilitato) Ive ha incluso questa risposta anche per voi, qui andiamo:

Quale messaggio popup si desidera disabilitare? Se è il messaggio di avviso, prova questo, ovviamente risolvendo la finestra o l'oggetto frame in base alle tue particolari esigenze, ho appena assunto il documento di livello superiore, ma se hai bisogno di un iframe puoi accedervi usando window.frames (0). per il primo fotogramma e così via ... (re la parte JavaScript) ... ecco un po 'di codice, supponendo che WB sia il controllo del tuo webbrowser ...

WB.Document.parentWindow.execScript "window.alert = function() {}; "," JScript "

È necessario eseguire il codice sopra riportato solo dopo aver completato l'intera pagina, ho capito che è molto difficile da eseguire (e una versione a prova di prova non è stata ancora pubblicata) tuttavia lo sto facendo (prova completa) da un po 'di tempo, e puoi raccogliere suggerimenti su come farlo in modo accurato se leggi alcune delle mie risposte precedenti etichettate "webbrowser" e "webbrowser-control", ma tornando a la domanda a portata di mano, se si desidera annullare il messaggio JavaScript .confirm, è sufficiente sostituire window.alert con window.confirm (ovviamente, qualificando la propria finestra. ct con l'oggetto corretto per raggiungere la gerarchia di documenti con cui stai lavorando). Puoi anche disabilitare il.metodo di stampa con la tecnica di cui sopra e il nuovo metodo IE9. Prompt pure.

Se si desidera disabilitare completamente JavaScript, è possibile utilizzare il Registro di sistema per eseguire questa operazione ed è necessario apportare modifiche al Registro di sistema prima che il controllo del browser carichi in memoria e ogni volta che lo si modifica (su & disattivato) è necessario ricaricare il webbrowser controlla fuori e in memoria (o semplicemente riavvia la tua applicazione).

La chiave di registro è \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\ - il keyname è 1400 e il valore per disabilitarla è 3, e per consentire è 0.

Naturalmente, perché ci sono 5 zone sotto le zone chiave, è necessario o cambiarlo per la zona attiva o per tutte le zone per essere sicuro. Tuttavia, non è davvero necessario farlo se tutto ciò che si vuole fare è supress i messaggi pop-up della finestra di dialogo js.

Fammi sapere come si va e se posso aiutare ulteriormente.

Problemi correlati