zoukankan      html  css  js  c++  java
  • C#执行javascript代码

    最近在做网站自动登陆小工具,遇到技术屏障。密码在submit时会使用js进行加密。这时我需要模拟这个加密过程,想到使用C#执行javascript代码。

    对于执行javascript代码,纯代码方式使用如下两种方式。

    1、Google Chrome V8引擎

    Google Chrome V8引擎在.NET上的封装,功能完善,性能相对较高。地址: http://javascriptdotnet.codeplex.com/

    using Noesis.Javascript;
    using System;
    using System.Collections.Generic;
     
    namespace JsCSharp
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (JavascriptContext ctx = new JavascriptContext())
                {
                    var j = ctx.Run("function add(x,y){return x+y;};add(5,10);");
                    Console.WriteLine(j);//15
                }
            }
        }
    }

    2、使用 Microsoft.JScript

    Microsoft.JScript是微软提供的程序集,可以在vs中直接添加引用。在开发时必须引入Microsoft.JScript、Microsoft.Vsa命名空间。

    using Microsoft.JScript;
    using Microsoft.JScript.Vsa;
    using System;
     
    namespace JsCSharp
    {
        class Program
        {
            static VsaEngine Engine = VsaEngine.CreateEngine();
     
            static void Main(string[] args)
            {
                var j = EvalJScript("function add(x,y){return x+y;};add(5,10);");
                Console.WriteLine(j);//15
            }
     
     
            static object EvalJScript(string JScript)
            {
                object Result = null;
                try
                {
                    Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine);
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
                return Result;
     
            }
        }
    }

    3、最后我使用的方法

    在开发中,使用加密js似乎存在缺陷,应用上面两种方法均返回“参数不匹配”错误,但是在浏览器控制台执行加密脚本没有出现任何错误。故使用替代方法。

    B/S架构web应用执行javascript

    页面执行javascript后,再提交结果到后台。

    window.$ = function (a) {
                return document.getElementById(a);
            }
            window.onload = function () {
                $('form1').onsubmit = function () {
                    var pwd = $('hfdPwd');
                    pwd.value = jingoalSHA1.hex_sha1(jingoalSHA1.hex_sha1($('txtPwd').value) + $('hfdToken').value)
                }
            }

    比较复杂逻辑,如提交数据到后台,处理后返回前端执行脚本再次提交到后台。

    C/S架构的Winform

    使用webbrowser在页面执行脚本,利用api获得值。虽没有上面两种干净和谐,但不失为一种解决方案。

  • 相关阅读:
    jQuery之概念以及基本使用
    微信小程序开发(八)-生命周期
    微信小程序开发(七)-自定义组件
    微信小程序开发(六)-常⻅组件
    微信小程序开发(五)-⼩程序事件的绑定与样式
    微信小程序开发(四)-列表渲染
    微信小程序开发(三)-数据绑定
    vue中使用v-echars
    原生aspx页面如何引用公共js和css
    layui常用的验证
  • 原文地址:https://www.cnblogs.com/archip/p/3735102.html
Copyright © 2011-2022 走看看