看到有些软件,比如说迅雷,它获取网址的就是调用的是一个HTML页面,里面引用的是JS代码,
我想请问一下C#winform如何调用JS函数。传入参数与输出结果。。

解决方案 »

  1.   

    用codedom和reflection可以实现,下面是从别人那里拷来的调用eval函数的例子,很有参考价值:
     public class Evaluator
     {
     /**/
     /// 
     /// 计算结果,如果表达式出错则抛出异常
     /// 
     /// 表达式,如"1+2+3+4"
     /// 结果
     public static object Eval(string statement)
     {
         return _evaluatorType.InvokeMember(
         "Eval",
          BindingFlags.InvokeMethod,
          null,
          _evaluator,
          new object[] { statement }
         );
     }
     /**/
     /// 
     /// 
     /// 
     static Evaluator()
     {
     //构造JScript的编译驱动代码
     CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript");
    
     CompilerParameters parameters;
     parameters = new CompilerParameters();
     parameters.GenerateInMemory = true;
    
     CompilerResults results;
     results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
    
     Assembly assembly = results.CompiledAssembly;
     _evaluatorType = assembly.GetType("Evaluator");
    
     _evaluator = Activator.CreateInstance(_evaluatorType);
     }
    
     private static object _evaluator = null;
     private static Type _evaluatorType = null;
     /**/
     /// 
     /// JScript代码
     /// 
     private static readonly string _jscriptSource =
    
     @"class Evaluator
     {
     public function Eval(expr : String) : String 
     { 
     return eval(expr); 
     }
     }";
     }
      

  2.   

    JS:
    <script type="text/javascript">
    function temp(obj)
    {
            document.all["Country"].innerText=obj;
    }
    </script>
    form:
    mshtml.IHTMLDocument2 currentDoc = (mshtml.IHTMLDocument2)   webBrowser1.Document.DomDocument;
    mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)currentDoc.parentWindow;
    win.execScript("temp('fdsafadsf)", "javascript");//调用函数temp