working webbrowser visual studio not internet control chrome alternative alternativa javascript winforms javascript-events webbrowser-control

visual - webbrowser c# javascript not working



Cómo manejar eventos de JavaScript a través del control WebBrowser para WinForms (3)

He leído WebBrowser Control desde .Net - Cómo inyectar Javascript , ¿es posible llamar al método Javascript desde c # winforms y muchos otros? Esos ejemplos son el valor de la función de devoluciones o la ventana de alerta (llamadas sincrónicas). Tengo que obtener el resultado del controlador de eventos (llamada asyn):

<script type="text/javascript"> window.onload = function() { var o = new M.Build(document.getElementById("ZID")); M.Events.observe(o, o.Events.Success, function() { // I have to get some value!! }); M.Events.observe(o, o.Events.Fault, function() { // I have to get some value!! }); } </script>


Este es el código que tengo. En el evento DocumentCompleted (porque obtengo una página en línea)

var wb = (WebBrowser)sender //Lots of other stuff object obj = wb.Document.InvokeScript("MyFunctionName");

Crea una función que devuelva el valor que necesites e invoca.

También puede insertar una secuencia de comandos en la página

string js = "function MyFunctionName(){alert(''Yea!'');}"; HtmlElement el = wb.Document.CreateElement("script"); IHTMLScriptElement element2 = (IHTMLScriptElement)el.DomElement; element2.text = js; head.AppendChild(el);

que luego puede invocarse. Eso es lo que hice.


Llamar a C # desde JavaScript

En pocas palabras, puede exponer un objeto C # al WebBrowser al que el JavaScript puede llamar directamente. La clase WebBrowser expone una propiedad llamada ObjectForScripting que su aplicación puede establecer y se convierte en el objeto window.external dentro de JavaScript. El objeto debe tener el conjunto ComVisibleAttribute verdadero

DO#:

[System.Runtime.InteropServices.ComVisibleAttribute(true)] public class ScriptInterface { public void callMe() { … // Do something interesting } } webBrowser1.ObjectForScripting = new ScriptInterface();

Javascript:

window.external.callMe();

Llamar a JavaScript en un control WebBrowser desde C #


Si su control webBrowser está en un formulario, puede hacer lo siguiente:

[System.Runtime.InteropServices.ComVisibleAttribute(true)] public class Form1 { public Form1() { InitializeComponent(); webBrowser1.ObjectForScripting = this; } public CallMe() { //.... this method can be called in javascript via window.external.CallMe() } }