node 中的 context / scope ( node-webkit context)
访问量: 6660
node 中,每段js 都会有自己的 context . 这点理解起来跟ruby, raw html/js很不一样。
看看官方的说法: (https://github.com/rogerwang/node-webkit/wiki/Differences-of-JavaScript-contexts
- If the require() method (of Node.js modules API) is used, then the required module runs in the Node's context. (When you call the require() function or a function from some required module, the JS engine enters the Node's context and leaves it after the function returns.)
- If HTML <script src="..."> element (or jQuery's $.getScript(), or any other similar method) is used in some window, then the script runs in the context of that window.
- If the module is given as the value of the "node-main" property of the application's manifest file, then the module runs in the Node's context but later has access to the window object. (See the “node-main” article for details.)
总之,它有3个不同的 context 。 实际上用起来是这个效果:
想让JS在全局生效, 需要在package.json 中设置 'node-main' 这个属性, 例如
1. package.json
{ "name": "nw-demo", "node-main": "index.js", "main": "index.html" }
2 .index.js:
var i = 0; exports.callback0 = function () { console.log(i + ": " + window.location); window.alert ("i = " + i); i = i + 1; }
3. 最后,在HTML中引用这个方法:
<body onload="process.mainModule.exports.callback0()">
但是,如果在 index.js 中引入 jQuery, 会报错: jquery 需要一个 window, document啥啥的。
所以, 我们需要下面的代码: (也就是说,每一个HTML都要有自己的 $ = require('jquery') )
<div id='target_site'></div> <script> url = 'http://siwei.me' $ = require('jquery') request = require('request') request(url, function(error, response, body){ if (!error && response.statusCode == 200 ) { $('#target_site').html(body) //console.info(body) alert('ok!') } })