Sto tentando di visualizzare una pagina HTML con codice JavaScript incorporato all'interno di un controllo System.Windows.Forms.WebBrowser
. Si prevede che il codice JavaScript interagisca con l'ambiente di incorporamento tramite l'oggetto window.external
. Prima di invocare un metodo su window.external
, JavaScript deve verificare l'esistenza del metodo. Se non è presente, il codice dovrebbe richiamare un metodo di fallback generico.Il metodo senza argomento su window.external viene richiamato durante il controllo con typeof
// basic idea
if (typeof(window.external.MyMethod) != 'undefined') {
window.external.MyMethod(args);
} else {
window.external.Generic("MyMethod", args);
}
Tuttavia, il controllo di un metodo senza argomenti con typeof
sembra richiamare il metodo già. Cioè, se MyMethod
accetta qualsiasi numero positivo di argomenti, il codice sopra funzionerà perfettamente; ma, se MyMethod
è un metodo senza argomento, l'espressione typeof(window.external.MyMethod)
non verificherà il suo tipo ma lo invocherà anche.
C'è qualche soluzione a questo comportamento? Posso in qualche modo sfuggire all'espressione window.external.MyMethod
per impedire il verificarsi della chiamata al metodo?
Hai provato a utilizzare typeof come operatore anziché come funzione? 'typeof window.external.MyMethod! ==" undefined "' –
Chiunque risponda a questa domanda deve ** provare la propria soluzione con 'window.external' su IE ** - metodi regolari di test per l'esistenza di un oggetto su Javascript do non funziona per 'window.external'. – funkybro