2011-12-01 76 views
3

我想单独使用V8 javascript引擎,我会在命令行中运行它解释herehttp函数在V8 javascript引擎

$> ./v8-shell -e 'print("10*10 = " + 10*10)' 

我想的JavaScript执行某些HTTP请求,最好使用jQuery API,但XMLHttpRequest的也行。

V8中有没有内置方法可以做到这一点?如果没有,有没有办法实现它,而不实施accessors/cpp扩展?

+0

你可以对V8内部的'curl'或'wget'进行系统调用吗? – hugomg

回答

6

V8中有没有内置的方法可以做到这一点?

不是直接在V8中,而是有NodeJS,它增加了网络和文件系统功能among other features

要从文档偷一个例子:

var options = { 
    host: 'www.google.com', 
    port: 80, 
    path: '/upload', 
    method: 'POST' 
}; 

var req = http.request(options, function(res) { 

    // callback invoked when response is received 
    console.log('STATUS: ' + res.statusCode); 
    console.log('HEADERS: ' + JSON.stringify(res.headers)); 
    res.setEncoding('utf8'); 

    res.on('data', function (chunk) { 

     // 'data' event is fired whenever a chunk of the response arrives 
    console.log('BODY: ' + chunk); 
    }); 
}); 

req.on('error', function(e) { 
    console.log('problem with request: ' + e.message); 
}); 

// write data to request body 
req.write('data\n'); 
req.write('data\n'); 
req.end(); 
2

V8只是一个JavaScript引擎,它没有像XMLHttpRequest这样的alert或主机对象等浏览器主机方法。

2

这里有一个很好的例子:当您使用节点的vm.createContext()方法,基本上是直接结合到V8的功能,这里是全球范围内有:

Errors:  [Error, EvalError, RangeError, ReferenceError, 
       SyntaxError, TypeError, URIError], 

    Types:  [Array, Boolean, Date, Function, Map, Number, 
       Object, Proxy, RegExp, Set, String, WeakMap], //--harmony: [Map, Proxy, Set, WeakMap] 


    Primitives: [Infinity, NaN, undefined], 

    Dicts:  [Math, JSON], 

    Methods: [decodeURI, decodeURIComponent, encodeURI, encodeURIComponent, 
       escape, eval, isFinite, isNaN, parseFloat, parseInt, unescape] 

它甚至没有set/clearTimeout,set/clearInternal(不是原生的javascript函数)。作为一种语言,JavaScript比大多数人意识到的要紧得多。它始终存在于主机环境中,在其上添加更多内容。