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();
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()
}
}