C#调用htmlfile组件,并执行js函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#调用htmlfile组件,并执行js函数相关的知识,希望对你有一定的参考价值。

前一篇我测试了vba调用htmlfile做反混淆,并执行js函数的代码。本文换成C#实现。

 

本文地址:http://www.cnblogs.com/Charltsing/p/CSharpEval.html

联系QQ:564955427

 

C#调用com组件需要使用CreateInstance,当然,我们也可以通过反编译vb.net里面的CreatObject来修改成C#代码。我从网上下载了一个

        [SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]
        public static object CreateObject(string ProgId, [Optional, DefaultParameterValue("")] string ServerName)
        {
            object obj2;
            if (ProgId.Length == 0)
            {
                throw new Exception ("Creatobject error!");
            }
            if ((ServerName == null) || (ServerName.Length == 0))
            {
                ServerName = null;
            }
            else if (Thread.CurrentThread.CurrentCulture.CompareInfo.Compare(Environment.MachineName, ServerName, CompareOptions.IgnoreCase) == 0)
            {
                ServerName = null;
            }
            try
            {
                Type typeFromProgID;
                if (ServerName == null)
                {
                    typeFromProgID = Type.GetTypeFromProgID(ProgId);
                }
                else
                {
                    typeFromProgID = Type.GetTypeFromProgID(ProgId, ServerName, true);
                }
                obj2 = Activator.CreateInstance(typeFromProgID);
            }
            catch (COMException ex)
            {
                if (ex.ErrorCode == -2147023174)  //800706ba The RPC server is unavailable, The server name is wrong in the client machine‘s System Registry entry for the remote application
                {
                    throw new Exception("Creatobject error! the RPC server is unavailable!");
                }
                throw new Exception("Creatobject error! " + ex.Message);
            }
            catch (Exception e)
            {
                throw new Exception("Creatobject error! " + e.Message);
            }
            return obj2;
        }

  这样,我们也可以在C#里面直接使用CreatObject了

      我们还使用前一篇文章中用到的测试网站,改成c#代码如下:

            dynamic ohtmlDoc = CreateObject("htmlfile");
            string js = 要反混淆的js代码;
            
            //1、反混淆js
            js = "document.write(" + js.Substring(5);
            ohtmlDoc.write("<html>");
            js = "<script>" + js + "</script>";
            ohtmlDoc.write(js);
            ohtmlDoc.write("</html>");
            string html = ohtmlDoc.body.innertext;  //反混淆之后的html

  然后再使用htmlfile.parentWindow.execScript(js代码),就可以通过eval执行js函数了。

     需要注意的是,dynamic 只在.net 4.0之后支持,如果是之前的版本,请使用反射调用。

 

     本文地址:http://www.cnblogs.com/Charltsing/p/CSharpEval.html

 

以上是关于C#调用htmlfile组件,并执行js函数的主要内容,如果未能解决你的问题,请参考以下文章

WebView2 (WPF) - 从本地文件夹加载网站并调用 C# 函数并调用 JS 函数

从 React.js 中的另一个类组件调用函数

Node.js 之react.js组件-Props应用

js组件封装,调用的方法怎么写

C#析构函数

React.js:将道具从函数传递到组件