文/玄魂

目录

node-webkit教程(10)Platform Service之shell

前言

11.1  Shell是什么

11.2  示例

11.3 小结

前言

几个月前,要开发一个简易的展示应用,要求支持离线播放(桌面应用)和在线播放(web应用)。

当时第一想到的是flex,同一套代码(或者只需少量的更改)就可以同时运行在桌面和浏览器上。由于很多展现效果要全新开发,我想到了impress.js(https://github.com/bartaz/impress.js/)。如果选择impress.js,就意味着要将html5作为桌面应用,当时想到要封装webkit,但是本人对这方面也不是很熟悉,时间也很有限,就又沿着这个方向搜索,找到了node-webkit(https://github.com/rogerwang/node-webkit)。

node-webkit解决了我通过htmljs来编写桌面应用的难题

至于node-webkit的定义,按照作者的说法:

“ 基于node.js和chromium的应用程序实时运行环境,可运行通过HTML(5)、CSS(3)、Javascript来编写的本地应用程序。node.js和webkit的结合体,webkit提供DOM操作,node.js提供本地化操作;且将二者的context完全整合,可在HTML代码中直接使用node.js的API。”

从本篇文章开始,为您介绍Platform Services些列的API,本系列由以下类别:

·             App – 每个应用运行时全局api

·             Clipboard – 剪贴板

·             Tray – 状态栏图标,消息通知

·             File dialogs-文件选择对话框

·             Shell – 桌面相关

·             Handling files and arguments-处理文件和相关参数

11.1  Shell是什么

Shell是和桌面系统相关的一组API。通常在操作系统中,我们有“核”和“壳”的区分,“核”是操作系统的内核,“壳”是一个操作界面,提供给用户输入命令,解析并执行命令(调用“核”),这个用户界面被称作Shell(“壳”)。最常见的shell就是命令行(如windows下的CMD)。

Node-Webkit提供的shell功能很有限,现在能看到的只有三个api:

l  openExternal(URI)

用桌面系统默认的行为,在应用外部打开URI。这和我们在浏览器中打开一个mailto:链接是一样的,控制器会转到桌面系统默认的邮件客户端。

l  openItem(file_path)

以操作系统默认方式打开指定路径。

l  showItemInFolder(file_path)

在文件管理器中显示“file_path”指定的文件。

11.2  示例

新建shell.html和package.json文件。

shell.html 内容如下:

<html>

<head>

<title>shellDemo</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body >

<h1>shell 测试</h1>

<button onclick="openInexplorer()">在默认浏览器中打开玄魂的电子书</button>

<button onclick="openPdf()">打开pdf</button>

<button onclick="showPdfInFloder()">打开pdf所在的文件夹</button>

<script>

// Load native UI library.

var gui = require('nw.gui');

var shell = gui.Shell;

function openInexplorer()

{

shell.openExternal('http://ebook.xuanhun521.com');

}

function openPdf()

{

shell.openItem('D:\\101.pdf');

}

function showPdfInFloder()

{

shell.showItemInFolder('D:\\学习资料\\技术类教程\\操作系统\\101-深入理解Linux内核(第三版 英文版)-1030页-pdf-免费下载.pdf');

}

</script>

</body>

</html>

package.json内容如下:

{

"name": "shell-demo",

"main": "shell.html",

"nodejs":true,

"window": {

"title": "shellDemo",

"toolbar": true,

"width": 800,

"height": 600,

"resizable":true,

"show_in_taskbar":true,

"frame":true,

"kiosk":false,

"icon": "2655716405282662783.png"

},

"webkit":{

"plugin":true

}

}

在上面的代码中,我们首先获取shell对象,

// Load native UI library.

var gui = require('nw.gui');

var shell = gui.Shell;

函数openInexplorer中,调用shell.openExternal方法,在默认浏览器中打开“玄魂的电子书站点”。运行效果如下:

在函数openPdf中调用shell.openItem('D:\\101.pdf'),在系统默认的paf阅读器中打开pdf文档,效果如下:

在函数showPdfInFloder中,调用shell.showItemInFolder方法,在文件夹中显示并选中该文件。

11.3 小结

本文内容主要参考node-webkit的官方英文文档,做了适当的调整(https://github.com/rogerwang/node-webkit/wiki/Shell)。

鄙视不标明出处的转载,更多相关内容,欢迎访问玄魂的博客(www.xuanhun521.com)

更多相关内容,欢迎访问玄魂的博客(更多node-webkit相关内容 http://www.xuanhun521.com/Blog/Tag/node-webkit)

ps:nw.js,electron交流群 313717550

node-webkit教程(11)Platform Service之shell的更多相关文章

  1. node-webkit教程(10)Platform Service之File dialogs

    node-webkit教程(10)Platform Service之File dialogs 文/玄魂 目录 node-webkit教程(10)Platform Service之File dialog ...

  2. node-webkit教程(8)Platform Service之Clipboard

    node-webkit教程(8)Platform Service之Clipboard 文/玄魂 目录 node-webkit教程(8)Platform Service之Clipboard 前言 8.1 ...

  3. node-webkit教程(7)Platform Service之APP

    node-webkit教程(7)Platform Service之APP 文/玄魂 前言 几个月前,要开发一个简易的展示应用,要求支持离线播放(桌面应用)和在线播放(web应用). 当时第一想到的是f ...

  4. Node入门教程(11)第九章:Node 的网络模块

    net网络模块 net模块是node对TCP或者IPC开发的封装,包括了客户端和服务器端相关API.对于阅读本文,请您有一定的网络编程的基础.您需要已经了解了: ip协议,会配置ip地址 了解dns解 ...

  5. Service官方教程(11)Bound Service示例之2-AIDL 定义跨进程接口并通信

    Android Interface Definition Language (AIDL) 1.In this document Defining an AIDL Interface Create th ...

  6. [转帖]Linux教程(11)- linux中的计划作业

    Linux教程(11)- linux中的计划作业 2018-08-21 17:13:36 钱婷婷 阅读数 160更多 分类专栏: Linux教程与操作 Linux教程与使用   版权声明:本文为博主原 ...

  7. Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程 分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使 ...

  8. Xamarin.FormsShell基础教程(2)创建Shell解决方案

    Xamarin.FormsShell基础教程(2)创建Shell解决方案 创建Shell解决方案 在开发Shell的应用程序时,首先需要创建一个Shell解决方案,其具体操作步骤如下: (1)在VS的 ...

  9. [转帖]Linux教程(20)- Linux中的Shell变量

    Linux教程(20)- Linux中的Shell变量 2018-08-24 11:30:16 钱婷婷 阅读数 37更多 分类专栏: Linux教程与操作 Linux教程与使用   版权声明:本文为博 ...

随机推荐

  1. dubbo 使用总结

    第一步: 安装注册中心Register,这里选择 zookeeper 1.zookeeper下载url:http://zookeeper.apache.org; 2.下载解压完后如下: 3.将zoo_ ...

  2. C语言提供了几个标准库函数 itoa() atoi()

    C语言提供了几个标准库函数C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子: # include <s ...

  3. [python] defaultdict

    import collections s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] # defaul ...

  4. WordPress主机

  5. winform-全局异常捕获作用

    using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;using Jxs ...

  6. 修改myeclipse的servlet模板

    今天修改myeclipse的servlet模板时,发生 Could not create the view: An unexpected exception was thrown.错误. 解决方案:1 ...

  7. Python网络爬虫Scrapy框架研究

    看到一个爬虫比较完整的教程.保留一下. https://github.com/yidao620c/core-scrapy

  8. opps kio

    Unable to handle kernel NULL pointer dereference at virtual address 00000008pgd = c7090000, hw pgd = ...

  9. treeMap and treeSet

    TreeSet:如果要对对象进行排序,对象类要实现Comparable接口! TreeMap:如果要对对象进行排序,对象类要实现Comparable接口! 下面是我自己写的小程序主要传输对象 publ ...

  10. CSS3中:nth-child和:nth-of-type的区别深入理解

    关于:nth-child和:nth-of-type的区别之前一直没太注意.最近打算深入了解一些CSS3,才发现里面其实暗藏玄机. :nth-child可以选择父元素下的字元素,:nth-of-type ...