internet habilitar gratis enable cómo como chrome celular activar javascript c# browser webbrowser-control dom-events

habilitar - Cómo detectar la ejecución de Javascript en el control WebBrowser



enable javascript internet explorer 11 (3)

Tengo un control WebBrowser en mi aplicación C #. El navegador web está bajo el control del usuario, es decir, puede cargar cualquier página web a la que su computadora pueda acceder en la web (por supuesto, está limitada por proxy, archivo de hosts, etc.).

Necesito saber y ser notificado cuando haya una llamada de Javascript dentro de la página cargada en el componente del navegador web.

Primer ejemplo: dado un enlace como este

<a href="javascript:void(0)" onclick="jsFunct();">test</a>

Cuando el usuario hace clic en el enlace, necesito saber que se ha llamado a la función "jsFunct".

Segundo ejemplo: dada una llamada como

<script type="text/javascript"> window.setTimeout("jsFunct()", 1000); </script>

Necesito saber que, 1 segundo después de la ejecución del script, se ha llamado a la función jsFunct.

Lo mejor sería tener un evento activado cuando se llama a la función. También sería genial si el evento pudiera ejecutar el código Javascript, o al menos el nombre de la función en los argumentos.

EDITAR:

Incluso si la pregunta está relacionada con el componente del navegador web, cualquier cosa que le permita al usuario detectar la activación de javascript (incluso a través de js) estaría bien, pudiendo inyectar un js que maneja el evento de javascript y lo pasa al control de wb y desencadena algún evento que puede manejar.


Bueno, lo que Krishna ha respondido es la combinación de javascript puro que se adjunta a los eventos, sin embargo, veo que es posible que deba adjuntarlo a todas las etiquetas (a, p, div, entrada), etc. y a todos los eventos adjuntos a cada etiqueta.

Creo que la otra forma es jugar con el BHO (objeto de ayuda del navegador) disponible en .net, y si no, y eres bueno en VC ++ y MFC, también puedes jugar con Windows Hooks.


En el evento de carga del navegador web,

  1. Inyectar jquery
  2. Inyectar guiones de monitor

,

private void addScript(HtmlElement head, string scriptSource) { HtmlElement lhe_script = head.Document.CreateElement("script"); IHTMLScriptElement script = (IHTMLScriptElement)lhe_script.DomElement; script.src = scriptSource; head.AppendChild(lhe_script); } addScript(Webbrowser.Head, @"<Change File Path here>jquery.min.js"); addScript(WebBrowser.Head, @"InjectMonitor.js");

tu archivo InjectMonitor.js debería ser algo como esto

$(document).ready(function () { //Add click event for every anchor on the page loaded- note this merely alerts text on click. you can however add your own function $("a").click(function (e) { alert($(this).text()); return false;}) });


Puede usar window.external para llamar a un método de C # cuando se window.external una función global en JavaScript. Consulte la Descripción general del control WebBrowser para obtener detalles sobre window.external.

Tendrá que configurar ObjectForScripting: el control de la ventana del navegador web.external SIEMPRE es nulo. para que esto funcione

Tome la respuesta de @ Krishna para agregar JavaScript (pero suelte jQuery porque no será necesario):

private void addScript(HtmlElement head, string scriptSource) { HtmlElement lhe_script = head.Document.CreateElement("script"); IHTMLScriptElement script = (IHTMLScriptElement)lhe_script.DomElement; script.src = scriptSource; head.AppendChild(lhe_script); } addScript(WebBrowser.Head, @"InjectMonitor.js");

El siguiente JavaScript (InjectMonitor.js) encontrará todas las funciones globales y adjuntará su controlador especificado:

function augment(withFn) { var name, fn; for (name in window) { fn = window[name]; if (typeof fn === ''function'') { window[name] = (function(name, fn) { var args = arguments; return function() { withFn.apply(this, args); fn.apply(this, arguments); }; })(name, fn); } } } augment(function(name, fn) { console.log("calling " + name, fn); // window.external.yourC#method });

En este ejemplo, tomado de Agregar el registro de la consola a cada función , simplemente registra la llamada a la consola; pero al usar window.external, puede enviar un mensaje a su aplicación de C # con detalles de a qué función se llamó desde el cliente.

Finalmente, aquí hay un ejemplo de JS Bin (ejecútalo y no olvides la consola): JS Bin Example