zoukankan      html  css  js  c++  java
  • 在c#中运行js脚本(将js文件生成为.dll文件)

    原文链接:http://www.cnblogs.com/xhan/archive/2010/10/22/1857992.html

    前言:

    本来在搞一个Google翻译的接口--向Google翻译发送请求--返回翻译数据...

    结果发现发送请求中的一个参数(tk)是需要验证的,验证不通过,报403错误...

    网上搜到一个可以自己生成tk值的方法,不过是js写的...省事的想将js代码直接拿来用...

    就看到了博客中的一个例子...

    0--

    function b(a, b) {
        for (var d = 0; d < b.length - 2; d += 3) {
            var c = b.charAt(d + 2),
                c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),
                c = "+" == b.charAt(d + 1) ? a >>> c : a << c;
            a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c
        }
        return a
    }
    
    function tk(a,TKK) {
        for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {
            var c = a.charCodeAt(f);
            128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)
        }
        a = h;
        for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");
        a = b(a, "+-3^+b+-f");
        a ^= Number(e[1]) || 0;
        0 > a && (a = (a & 2147483647) + 2147483648);
        a %= 1E6;
        return a.toString() + "." + (a ^ h)
    }

    打开vs命令行 运行 "jsc /t:library C:common.js"

    生成报错···JS1234:在库的内部只允许类型和包定义

    更正此错误

    • 确保该代码只包含类、接口和包。

    1--在最外面一层添加class..

    class jsCommon{
    
        function b(a, b) {
            for (var d = 0; d < b.length - 2; d += 3) {
                var c = b.charAt(d + 2),
                    c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),
                    c = "+" == b.charAt(d + 1) ? a >>> c : a << c;
                a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c
            }
            return a
        }
    
        function tk(a,TKK) {
            for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {
                var c = a.charCodeAt(f);
                128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)
            }
            a = h;
            for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");
            a = b(a, "+-3^+b+-f");
            a ^= Number(e[1]) || 0;
            0 > a && (a = (a & 2147483647) + 2147483648);
            a %= 1E6;
            return a.toString() + "." + (a ^ h)
        }
    
    }

    打开vs命令行 运行 "jsc /t:library C:common.js"

    成功生成...???

    3--尴尬-生成到哪里了···

    最后研究下jsc的一些文档吧···找到一份说明:http://www.planabc.net/2011/06/04/use_jscript_to_create_windows_apps_and_libraries/

        jsc [选项] <源文件> [[选项] <源文件>…]
    
        JScript 编译器选项
    
        – 输出文件 –
        /out:<file> 指定二进制输出文件的名称
        /t[arget]:exe 创建控制台应用程序(默认)
        /t[arget]:winexe 创建 Windows 应用程序
        /t[arget]:library 创建库程序集
        /platform:<platform> 限制此代码可以在其上运行的平台;必须是 x86、Itanium、x64 或 anycpu。默认为 anycpu
    
        – 输入文件 –
        /autoref[+|-] 基于导入的命名空间和完全限定名称自动引用程序集(默认情
        况下为 on)
        /lib:<path> 指定要在其中搜索引用的附加目录
        /r[eference]:<file list> 从指定的程序集文件引用元数据 <file list>: <assembly name>[;<assembly name>…]
    
        – 资源 –
        /win32res:<file> 指定 Win32 资源文件(.res)
        /res[ource]:<info> 嵌入指定的资源 <info>: <filename>[,<name>[,public|private]]
        /linkres[ource]:<info> 将指定的资源链接到此程序集 <info>: <filename>[,<name>[,public|private]]
    
        – 代码生成 –
        /debug[+|-] 发出调试信息
        /fast[+|-] 禁用语言功能以使代码更好地生成
        /warnaserror[+|-] 将警告视为错误
        /w[arn]:<level> 设置警告等级(0-4)
    
        – 杂项 –
        @<filename> 有关更多选项,请阅读响应文件
        /? 显示帮助
        /help 显示帮助
        /d[efine]:<symbols> 定义条件编译符号
        /nologo 不显示编译器版权标志
        /print[+|-] 提供 print() 函数
    
        – 高级 –
        /codepage:<id> 使用指定的代码页 ID 打开源文件
        /lcid:<id> 将指定的 LCID 用于消息和默认代码页
        /nostdlib[+|-] 不导入标准库(mscorlib.dll)并将 autoref 默认值更改为 off
        /utf8output[+|-] 以 UTF-8 字符编码形式发出编译器输出
        /versionsafe[+|-] 为没有标记为“override”或“hide”的成员指定默认值

    打开vs命令行 运行 "jsc /t:library /out:d:common.dll C:common.js"

    生成生成!!!

    3.在c#项目中引用common.dll 和Micosoft.JScript.dll

    4.   

    xx x = new xx();

    xx....

    over。。。

     ???

    果然还是报错...

    仔细又看了一遍:http://www.planabc.net/2011/06/04/use_jscript_to_create_windows_apps_and_libraries/

    package LibHW {
    class jsCommon{
    
        function b(a, b) {
            for (var d = 0; d < b.length - 2; d += 3) {
                var c = b.charAt(d + 2),
                    c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),
                    c = "+" == b.charAt(d + 1) ? a >>> c : a << c;
                a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c
            }
            return a
        }
    
        function tk(a,TKK) {
            for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {
                var c = a.charCodeAt(f);
                128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)
            }
            a = h;
            for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");
            a = b(a, "+-3^+b+-f");
            a ^= Number(e[1]) || 0;
            0 > a && (a = (a & 2147483647) + 2147483648);
            a %= 1E6;
            return a.toString() + "." + (a ^ h)
        }
    }
    }

    这次外边又加了一个"package"...

    终于可以了···GG

  • 相关阅读:
    Redis学习笔记1:Redis介绍
    《设计模式之禅》读书笔记1:单一职责原则
    如何在Word中设置其中一页为横向(Office 2013)
    Linux CentOS7 升级内核的方法
    升级openSSH
    Windows服务器杀掉端口的方法
    Linux 安装zlib
    Linux升级openssl
    Linux下安装Perl 5
    Linux 安装gcc
  • 原文地址:https://www.cnblogs.com/love-zf/p/5889773.html
Copyright © 2011-2022 走看看