苏飞论坛

标题: 根据传入的JS方法名和参数执行JavaScript [打印本页]

作者: 站长苏飞    时间: 2014-9-17 09:46
标题: 根据传入的JS方法名和参数执行JavaScript
导读部分

【HttpHelper万能框架】教程目录贴  http://www.sufeinet.com/thread-9989-1-1.html
【HttpHelper万能框架】源码购买帖  http://www.sufeinet.com/thread-9926-1-1.html

教程部分


执行JS一直是网络抓取的难题,或者是说可以难倒一部分用户的难题,今天我在万能框架中提供一个简单的执行JS方法
可以直接调用一段JS代码中的方法,或者是直接执行一段JS代码。

我实现的是Js的Eval方法,这个方法我相信懂JS的人都知道一点,他是用来动态执行JS代码的,大家想一下如果我在C#中实现这个方法,是不是就会很方便的来使用C#执行JS了。
我只想说必须的。

下面看方法签名
[C#] 纯文本查看 复制代码
  /// <summary>
        /// 直接调用JS方法并获取返回的值
        /// </summary>
        /// <param name="strJs">要执行的JS代码</param>
        /// <param name="main">要调用的方法名</param>
        /// <returns>执行结果</returns>
        public static string JavaScriptEval(string strJs, string main)


调用方法,下面我 先给出一个简单的JS文件
[C#] 纯文本查看 复制代码


function main1() {

    return 1 + 1;
}

function main2(n) {

    return 1 + n;
}



下面是调用方法和用例大家请看代码
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using CsharpHttpHelper;

namespace CsharpHttpHelper_Demo
{
    public partial class HttpJs_Demo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            string strjs = string.Empty;
            using (StreamReader sr = new StreamReader(Server.MapPath("test.js")))
            {
                strjs = sr.ReadToEnd();
            }

            //调用不带参数的方法
            string main1 = HttpHelper.JavaScriptEval(strjs, "main1()");

            //调用带参数的方法
            string main2 = HttpHelper.JavaScriptEval(strjs, "main2(25)");

            //直接执行JS代码
            string jiafa = HttpHelper.JavaScriptEval(string.Empty, "25+1+4");

            //直接执行JS代码
            string time = HttpHelper.JavaScriptEval(string.Empty, " new Date().toString()");
        }
    }
}

效果如下
(, 下载次数: 659)