开发环境:.net2.0  c# vs2005或2008均可
问题描述:我用WebBrowser控件作浏览器,当随便访问一个网站时,需要捕捉网页中类似alert弹出的消息框的弹出事件,同时得到该消息框的内容.(即当弹出一个消息时,我可以通过消息的内容来进行处理)。
本帖可给的100分!还有20元人民币!帮我解决问题后,在http://weike.taskcn.com/detail/index/id/24544
领取人民币。

解决方案 »

  1.   

    下面的代码示例演示如何使用 ObjectForScripting 属性。在该示例中,ObjectForScripting 属性被设置为当前窗体。using System;
    using System.Windows.Forms;
    using System.Security.Permissions;[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    public class Form1 : Form
    {
        private WebBrowser webBrowser1 = new WebBrowser();
        private Button button1 = new Button();    [STAThread]
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }    public Form1()
        {
            button1.Text = "call script code from client code";
            button1.Dock = DockStyle.Top;
            button1.Click += new EventHandler(button1_Click);
            webBrowser1.Dock = DockStyle.Fill;
            Controls.Add(webBrowser1);
            Controls.Add(button1);
            Load += new EventHandler(Form1_Load);
        }    private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.AllowWebBrowserDrop = false;
            webBrowser1.IsWebBrowserContextMenuEnabled = false;
            webBrowser1.WebBrowserShortcutsEnabled = false;
            webBrowser1.ObjectForScripting = this;
            // Uncomment the following line when you are finished debugging.
            //webBrowser1.ScriptErrorsSuppressed = true;        webBrowser1.DocumentText =
                "<html><head><script>" +
                "function test(message) { alert(message); }" +
                "</script></head><body><button " +
                "onclick=\"window.external.Test('called from script code')\">" +
                "call client code from script code</button>" +
                "</body></html>";
        }    public void Test(String message)
        {
            MessageBox.Show(message, "client code");
        }    private void button1_Click(object sender, EventArgs e)
        {
            webBrowser1.Document.InvokeScript("test",
                new String[] { "called from client code" });
        }}
      

  2.   

    支持、拒绝回答。你拿csdn 的网友当什么了?
      

  3.   

    我晕,在csdn混了一段时间,也知道做程序员的确很辛苦,任务中国那边我是先发帖子,想到csdn能够帮我解决问题,把那20块钱也付过来,我可以为csdn网友着想的。我只是解决一个问题,又不是做项目,做人不要这么死板好不好,国外的experts-exchange不是一样是付费的,威客不是也是付费的吗,每个人的经验本来就是有价值,借互联网,用自己的智慧和创意帮助别人,从而获得报酬。合情合理呀!你可以销售自己的经验,而不是去只拿工资。如果你觉得廉价,就没必要做软件,做的软件,公司可以卖上万一套,给你的工资是多少呢?能够销售自己的智慧有什么不可以呢?照你的想法威客网接任务的设计者都成什么了,你不想要20,可以领过来买成课本献给灾区呀,这样就不廉价了吧。现在百度是还不成熟,若干年成熟后,百度一样要付费的!!包括csdn!
      

  4.   

    TO:FlashElf 
    我的做法有哪点不对了,是我对不起csdn的网友?还是你思想太古板了?你认为我错在给钱了,我就疑惑了,加了钱又什么不好的,照你的逻辑,美国的程序员不是要死一大片了,这个问题因为我觉得有点难度,所以光给分不能表达我心意,钱给太多,我条件也不允许呀,如果你觉得贬低csdn网友了,那你觉得多少合适呢?200还是2000?如果你觉得csdn里付费提问贬低csdn网友,那你觉得csdn未来会不会走experts-exchange的路线呢?一句总结:mqcan、FlashElf太古板了!多大的事呀,考虑的这么复杂。
      

  5.   


    csdn本来就是交流技术的地方
    要谈钱就不该到这来要谈国外就去国外论坛好了这是中国!
      

  6.   

    TO:sq_zhuyi 
    experts-exchange不是讨论技术的么?“国外就去国外论坛”难道你不上国外技术论坛的么?技术还分国界么?“这是中国!”你不知道百度是在拷贝国外的experts-exchange商业模式?qq是拷贝ICQ的商业模式么?中国现在也在开始交易智慧呀,现在的威客网还少了?如果你觉得拿钱接项目是在侮辱你人格,那你牵头去抵制国内的威客了吧?那大家不谈国外了,不要研究c#了,不要用winxp,这些统统都是国外的。。在中国就不要看国外了,这是你的观点?请指教
      

  7.   

    TO:sq_zhuyi 
    我本来也是来交流技术的,是你们把问题搞的复杂,如果觉得钱侮辱你的人格,你不要就行了,答对问题只接分,那20我提你转给红十字会,这样多好呢?搞技术不看国外的?做网站不看国外的?做项目不看国外的?搞设计不看国外的?这是中国!那你蒙起头自己造原子弹吧。
      

  8.   

    问题补充如下:
    鉴于csdn网友的异议,我声明:答对问题的朋友,这20我不会硬塞给你,你可要可不要,我的本意是表达自己的心意,算是请兄弟喝杯茶,钱不多,只是我的心意,觉得钱少请见谅,我挣钱也不容易,你如果不要,只接分也行,问题解决后我以你的名义转交给红十字会,献给灾区,并把缴费记录贴图上来让兄弟们监督。
      

  9.   

    是从源代码中分析需要的js内容吗???money太少就不要了!!100分可以考虑!
      

  10.   

    网页的alert是调用user32.dll的MessageBox函数.所以你只需要Hook这个函数就能捕获所有MessageBox.
      

  11.   

    从源代码来分析js内容还不能实现,要捕捉网页弹出的消息框的事件,这就需要扩展WebBrowser,我对调用非托管的代码不太熟。
      

  12.   

    你做winform??看过别人写的浏览器(C#)了解到这个对象webbrowser分析js很简单的啊!!传入网址得到源代码得到脚本内容或者脚本文件地址(string[])分析脚本内容传入脚本地址得到js文件内容分析js脚本内容统一的正则:alert\((.*?)\)执行选项不区分大小写,或者你全部都tolower或者toupper