zoukankan      html  css  js  c++  java
  • 在winform里怎么调用WebBrowser控件里的脚本 (转自思归呓语)

    这是在CSDN论坛上的一个问题,感觉也许对其他人也会有点用处,所以贴出来

    JScript是建立在COM之上的,设置变量/调用函数是通过IDispatch来实现的。在.NET里,调用IDispatch里的方法是通过反射来实现的,即,通过System.Type.InvokeMember 。该方法调用 IDispatch::GetIDsOfNames 以及IDispatch::Invoke来调用COM Automation 对象里的方法和属性。参考

    Binding for Office automation servers with Visual C# .NET

    假如有下列HTML,

    <script language="javascript">
    var var1 = 'yes';
    function testx(obj)
    {
      alert(obj);
      alert(var1);
    }
    </script>
    <input type=button value="click me" onclick="testx('hello');">

    在C#里,假设axWebBrowser1是你的WebBrowser控件对象,你已经装载了上述HTML,你可以这么做,

    mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)axWebBrowser1.Document;
    mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)doc.parentWindow;

    //读变量值
    object o = win.GetType().InvokeMember ("var1", BindingFlags.GetProperty, null, win, new Object [] {});

    //写变量值
    win.GetType().InvokeMember ("var1", BindingFlags.SetProperty, null, win, new Object [] {"新的值"});

    //调用方法
    win.GetType().InvokeMember("testx",BindingFlags.InvokeMethod,null,win,new object[]{1});

    比较麻烦,对么?幸运的是,我们不用这么麻烦,因为IHTMLWindow2里有个现成方法,execScript,我们可以这么做:

    win.execScript("var1 = 'abc';","javascript");
    win.execScript("testx(12)","javascript"); 

  • 相关阅读:
    Linux基础命令---sudo
    Linux基础命令---yes
    Linux基础命令---shutdown
    Divide Two Integers
    java 判断两个数是否异号
    字节顺序的详细解释(转)
    java无符号移位(>>>)和有符号移位(>>)
    java 参数化类型
    c++事件内核对象(event)进程间激活(转)
    windows多线程编程(一)(转)
  • 原文地址:https://www.cnblogs.com/ZetaChow/p/2237421.html
Copyright © 2011-2022 走看看