首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

使用 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. 读取远程 RSS
1
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 这些技术拥有了跟多新的表现力以及更强的生命力。深度挖掘我们已经掌握的知识和技能,让我们的工作变得更有生产力和更有趣。
返回列表