为什么在WebBrowser控件中通过setTimeout方法调度的代码没有被调用
Why code scheduled via setTimeout method in WebBrowser control is not invoked
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public static class Program
{
[STAThread]
public static void Main()
{
using (var browser = new WebBrowser())
{
browser.Navigate(string.Empty);
browser.Document.InvokeScript("execScript", new object[] { "function set_obj(obj) { window.obj = obj }" });
browser.Document.InvokeScript("execScript", new object[] { "function say_hello() { window.obj.WriteLine('Hello world') }" });
browser.Document.InvokeScript("set_obj", new object[] { new Obj() });
browser.Document.InvokeScript("say_hello");
browser.Document.InvokeScript("setTimeout", new object[] { "say_hello()", 100 });
Console.ReadKey();
}
}
}
[ComVisible(true)]
public sealed class Obj
{
public void WriteLine(string message)
{
Console.WriteLine(message);
}
}
立即调用say_hello方法工作得很好,但是当我使用setTimeout延迟它时,它不会被调用。为什么?有什么变通办法吗?
正如用户@controlflow指出的那样,我需要在应用程序中使用消息循环来使setTimeout工作。添加以下行有帮助:
Application.Run(new Form { Controls = { browser }, WindowState = FormWindowState.Minimized, ShowInTaskbar = false });
不要在say_hello后面加上圆括号,因为您并不是要在那里调用它,而是将它作为一个委托传递给一个函数。所以试试:
browser.Document.InvokeScript("setTimeout", new object[] { "say_hello", 100 });
还有,控制台有任何错误吗?
更新 :
试题:
browser.Document.InvokeScript("setTimeout(say_hello, 100);");
也试试:
browser.Document.InvokeScript("setTimeout", new object[] { "say_hello", "100" });
无论问题是什么,都可能在某个地方出现了JavaScript错误。尝试写出所呈现的标记和脚本,并在浏览器中正常的网页中运行。
您应该更改以下行
browser.Document.InvokeScript("say_hello");
browser.Document.InvokeScript("say_hello()");
它抛出一个javascript异常,可能这是下一个命令不执行的原因。
相关文章:
- 从桌面读取python文件时高亮显示代码
- 如何将函数包装在函数中以避免代码重复
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 货币代码为欧元-金额的格式不应包含小数
- Regex代码只允许一个空格
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 从var向代码隐藏函数传递值
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 代码不会验证
- 如何从rails中的代码中删除新行( )
- Angularjs代码未在匿名函数中运行
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 面向对象的Javascript代码在IE7中不起作用
- 将 jQuery 代码添加到 Index.aspx 页面
- 为什么忽略了eval()代码中的语法错误
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- 为什么在WebBrowser控件中通过setTimeout方法调度的代码没有被调用
- CSS动画没有在点击按钮时使用Knockout代码启动,也没有调度点击事件