使用 Dojo 和 node-webkit 开发跨平台桌面应用(2)
 
- UID
- 1066743
|

使用 Dojo 和 node-webkit 开发跨平台桌面应用(2)
本地功能调用
上面示例程序的第一个选项卡,展示的是一个调用并展示计算机系统信息的功能。由于 Node-webkit 内置了 Node.js,所以调用计算机本地功能和资源的工作主要都是通过它的 API 来完成。我们的应用使用了 Node.js 的 OS 模块,用以读取计算机的基本信息:
清单 5. 读取本地系统信息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // 加载 nodejs OS 模块
var os = global.require('os');
//通过调用 nodejs api,获取本地计算机的内存使用信息
var getMemoryData = function() {
var fm = os.freemem();
var um = os.totalmem() - fm;
return [
{ x: "1", y: fm, text: "Free" },
{ x: "1", y: um, text: "Used" }
];
}
//通过调用 nodejs api,获取本地计算机的基本信息
var getSystemInfo = function() {
return {
hostname: os.hostname(),
ostype: os.type(),
platform: os.platform(),
arch: os.arch(),
cpus: os.cpus().length
};
}
|
读写本地文件系统也是桌面应用程序经常会用到的功能,以下代码段展示如何完成此任务:
清单 6. 读写本地文件1
2
3
4
5
6
7
8
9
10
11
| var fs = global.require('fs');
fs.readFile('/your/file.txt', function(err, data) {
if (err) throw err;
console.log(data);
});
fs.writeFile('/your/file.txt', 'Hello World', function(err) {
if (err) throw err;
console.log('Saved!');
});
|
注意:Dojo 和 Nodejs 都包含 require API,为了避免冲突,所以请使用 global.require()来限定作用域,以正确调用 Nodejs 的 require API。
远程数据访问
我们应用程序的第二个选项卡,展示如何访问远程数据。在 Web 开发中,Ajax,JSONP 等方式已经非常流行,这些技术在 Node-webkit 环境下仍然是可用的。在我们的程序中就使用了 Dojo 提供的 Ajax API 来获取 IBM DeveloperWorks 网站的 RSS 数据:
图 7. 远程数据访问示例运行界面 清单 7. 读取远程 RSS1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| request('http://www.ibm.com/developerworks/cn/views/global/rss/libraryview.jsp', {
handleAs: 'xml'
}).then(function(data){
var items = data.getElementsByTagName('item');
for (var i = 0; i < items.length; i++) {
var item = items;
var children = item.children;
var title = children[0].textContent;
var description = children[1].textContent;
var link = children[2].textContent;
var pubdate = new Date(Date.parse(children[3].textContent));
var feed = domConstruct.toDom([
'<div class="feed">',
'<h4><a href="', link, '" target="_blank">', title, '</a></h4>',
'<p>内容概要: ', description, '</p>',
'<div>发布时间: ', locale.format(pubdate), '</div>',
'</div>'
].join(''));
dom.byId('feed-list').appendChild(feed);
}
});
|
除了使用 Ajax,JSONP 等这些浏览器提供的远程数据访问方式,在 Node-webkit 中另外还可以使用 Nodejs 的 http,https 和 net 等模块 API 来发起系统原生的 HTTP 和 Socket 请求,与远程服务器进行数据交互。
清单 8. 使用 Socket 与服务器交互1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| var net = require('net');
var client = net.connect({ port: 8088 }, function() {
console.log('client connected');
client.write('hello world!\r\n'); //向服务器端发送 hello world!
});
client.on('data', function(data) {
console.log(data.toString()); //接受到服务器端发送来的数据
client.end();
});
client.on('end', function() {
console.log('client disconnected');
});
|
调试
调试 Node-webkit 应用,我们一般借助它自带的开发者工具。要使用这个工具,首先我们要在 package.json 中,将 window 设置项中的 toolbar 设置为 true,之后在运行程序的窗口上会出现顶部的工具栏,在工具栏内点击右边如下图红框中的按钮,则会弹出开发者工具(Developer Tools),点击"Sources"选项卡,出现的就是一个代码调试工具:
图 8. Node-webkit 调试工具界面 通过该调试工具,我们可以选择需要调试的代码文件,对代码行设置断点,设置要监视的变量等等,然后进行单步调试,并获取调试结果信息。
打包与发布
在一个应用程序开发完成后,将其打包成方便于发布的格式是我们必须做的事情。完成我们的 Node-webkit 应用程序的打包步骤如下:
步骤 1:将 sample-app 目录下的所有文件添加到一个 zip 格式的压缩文件 sample-app.zip 中,请确认 package.json 在这个 zip 文件中处于跟目录的位置;
步骤 2:将 sample-app.zip 重命名成 sample-app.nw;
步骤 3:在命令行中运行 nw sample-app.nw,确认能正确运行;
.nw 文件就是 Node-webkit 最基本的发布格式。如果您有需求需要将应用程序打包成.exe 或.app 等可执行文件的格式,您可以参阅 了解更多打包相关的详细内容,以达到您的目标。
结束语
随着 HTML5 的日趋成熟和广泛应用,基于 Web 技术的软件开发已经不甘心局限于传统概念的网页开发,它们的触角已经快速伸向了各个软件开发领域,比如 PhoneGap 移动应用开发, Adobe Air 应用开发等等,让 HTML,CSS,JavaScript 这些技术拥有了跟多新的表现力以及更强的生命力。深度挖掘我们已经掌握的知识和技能,让我们的工作变得更有生产力和更有趣。 |
|
|
|
|
|