none
Webbrowser控件的单击事件如何获取? RRS feed

  • 问题

  • webbrowser有单击时间,根据冒泡的原理,也应该可以在他的包含控件中获取。但是两者都不行。

    我需要一个可以和js互相交互的网页控件?InvokeScript可不可以获取js function的返回值,如果可以,如何获取?

    如何处理?

     

     

    2008年12月11日 2:42

答案

  •  

    根据冒泡的原理,也应该可以在他的包含控件中获取

     

    你指的是什么意思?难道你指的是在WPF程序中嵌入一个WebBrowser控件,然后监听WebBrowser里面网页的DOM事件?如果你要到达这个目的的话,我不认为WebBrowser控件提供了这种支持,不过你可以通过在自己的程序里面创建IE的internetexplorer.application COM组件--WebBrowser实际上是对这个ActiveX组件的封装,然后获取里面的IWebBrowserX(例如IWebBrowser2)接口,通过这个接口,你应该可以监听DOM事件。

     

    InvokeScript可不可以获取js function的返回值,如果可以,如何获取?如何处理?

     

    应该是可以的,根据MSDN给出的示例代码,你直接将InvokeScript的返回值转换成对应的类型就可以了,例如下面的代码:

    HTML:

    <HTML>

        <HEAD>
            <TITLE>Invoke Script Sample</TITLE>

            <SCRIPT>
                function MyObject() {
                    this.Data = "Data for my private object.";
                }
                // Return a string.
                function test() {
                    return("This is a test.");
                }
                // Return a JScript object.
                function testJScriptObject() {
                    return(new(MyObject));
                }
                // Return a DOM element.
                function testElement() {
                    return(div1);
                }
            </SCRIPT>
        </HEAD>

        <BODY>
            <DIV id="div1">
            </DIV>
        </BODY>

    </HTML>

     

    C#:

    private void InvokeScript()
    {
        if (webBrowser1.Document != null)
        {
            HtmlDocument doc = webBrowser1.Document;
            String str = doc.InvokeScript("test").ToString() ;
            Object jscriptObj = doc.InvokeScript("testJScriptObject");
            Object domOb = doc.InvokeScript("testElement");
        }
    }

     

    当然啦,如果你的JavaScript返回的是一个HTML控件的引用,我建议你还是采用自己封装InternetExplorer.Application这个ActiveX组件来做吧,所有的HTML控件都有对应的COM接口来操作。

    2008年12月11日 3:19

全部回复

  •  

    根据冒泡的原理,也应该可以在他的包含控件中获取

     

    你指的是什么意思?难道你指的是在WPF程序中嵌入一个WebBrowser控件,然后监听WebBrowser里面网页的DOM事件?如果你要到达这个目的的话,我不认为WebBrowser控件提供了这种支持,不过你可以通过在自己的程序里面创建IE的internetexplorer.application COM组件--WebBrowser实际上是对这个ActiveX组件的封装,然后获取里面的IWebBrowserX(例如IWebBrowser2)接口,通过这个接口,你应该可以监听DOM事件。

     

    InvokeScript可不可以获取js function的返回值,如果可以,如何获取?如何处理?

     

    应该是可以的,根据MSDN给出的示例代码,你直接将InvokeScript的返回值转换成对应的类型就可以了,例如下面的代码:

    HTML:

    <HTML>

        <HEAD>
            <TITLE>Invoke Script Sample</TITLE>

            <SCRIPT>
                function MyObject() {
                    this.Data = "Data for my private object.";
                }
                // Return a string.
                function test() {
                    return("This is a test.");
                }
                // Return a JScript object.
                function testJScriptObject() {
                    return(new(MyObject));
                }
                // Return a DOM element.
                function testElement() {
                    return(div1);
                }
            </SCRIPT>
        </HEAD>

        <BODY>
            <DIV id="div1">
            </DIV>
        </BODY>

    </HTML>

     

    C#:

    private void InvokeScript()
    {
        if (webBrowser1.Document != null)
        {
            HtmlDocument doc = webBrowser1.Document;
            String str = doc.InvokeScript("test").ToString() ;
            Object jscriptObj = doc.InvokeScript("testJScriptObject");
            Object domOb = doc.InvokeScript("testElement");
        }
    }

     

    当然啦,如果你的JavaScript返回的是一个HTML控件的引用,我建议你还是采用自己封装InternetExplorer.Application这个ActiveX组件来做吧,所有的HTML控件都有对应的COM接口来操作。

    2008年12月11日 3:19
  • 如何在vs2008中的csharp中创建您说的 internetexplorer.application COM组件 组件呢?

     

    2008年12月11日 4:14
  • 我已经在你的另外一个帖子里回答了这个问题

    http://forums.microsoft.com/china/ShowPost.aspx?PostID=4234644&SiteID=15

    2008年12月15日 7:37