JavaScript 中运用 new Function 实行字符串拼接表达式

作者 @zwhu
原文章 @github

近来在用 node 学写爬虫,也能够叫模仿上岸,碰到某个网站在返回的 HTML 中插入了一个天生页面token的script。

这个HTML的组织也许相似

<!Doctype html>
<html>
    <head></head>
    <body>
        <div></div>
        <script>       
            (function (w) {
                w.token = (function () {
                    // ....
                    // 天生token
        
                return token;
                })();;
            })(window);
        </script>
    </body>
</html>

起首拿到这个页面,然后猎取script标签的表达式字符串,剩下的事就是如何实行表达式字符串,并猎取token。

在此处的情形顶用eval也是挺不错的挑选,然则既然 JS 不引荐这类用法,那我们就换成 new Function 来做。

看下 new Function 的用法以下

new Function ([arg1[, arg2[, ...argN]],] functionBody)

new Function会返回一个函数。比方 fn = new Function('a', 'b', 'return a + b') 会返回一个函数对象

fn = function(a, b) {
    return a + b
}

so,我们能够运用 new Function 组织一个函数,用来实行猎取到得表达式,并返回token。

    fn = new Function('window', functionBody + ';return window.token')
    var token = fn({})
    console.log(token)

组织的这个函数有个window形参,作为函数体中马上实行表达式的实参传入最内层的函数中。所以在末了实行的时刻 return window.token 便会取得token 的内容。

    原文作者:zwhu
    原文地址: https://segmentfault.com/a/1190000003845777
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞