苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

分布式系统框架(V1.3) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper万能框架(V2.3-含.netcore) HttpHelper官方出品,无敌框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 最牛的爬虫类,没有爬不到只有想不到 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 26322|回复: 45

[教程] 根据传入的JS方法名和参数执行JavaScript

[复制链接]
发表于 2014-9-17 09:46:07 | 显示全部楼层 |阅读模式
导读部分

【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()");
        }
    }
}

效果如下
QQ截图20140917093856.jpg
好了,我相信有了这个方法能帮助大家解决很多问题。
更强大的功能我会一直研究,等有了成果我会第一时间加入万能框架,分享给大家使用。
这个功能将在25号左右的更新中出现。
小伙伴们有什么想法可以提提建议


发表于 2014-9-17 09:56:25 | 显示全部楼层
发表于 2014-9-17 09:57:36 | 显示全部楼层
发表于 2014-9-17 09:58:46 | 显示全部楼层
发表于 2014-9-17 19:48:29 | 显示全部楼层
发表于 2014-9-21 10:05:47 | 显示全部楼层
发表于 2014-9-22 09:42:36 | 显示全部楼层
赞一下,确实能对一些比较特殊的需求有帮助。如果将js放入缓存再来读取,能减少磁盘IO的压力。稍候我再看一下源码实现,判断一下执行性能。

谢谢站长团队:)
发表于 2014-9-22 12:49:22 | 显示全部楼层
发表于 2014-9-22 13:50:35 | 显示全部楼层
发表于 2014-10-17 10:12:01 | 显示全部楼层
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备17001017号-1)

GMT+8, 2019-10-21 18:26

© 2017-2018

快速回复 返回顶部 返回列表