在我朋友中,我被称为“星球大战迷”。我长期使用的昵称是 cfjedimaster(两个爱好的结合,另一个是 ColdFusion),我的工作是在一个塞满星球大战玩具的房间里,我已经两次在身上纹了星球大战图案。话虽如此,是另一部电影对我现在的职业生涯影响最大——《电子世界争霸战》。
在那之前,我已经对计算机产生了兴趣,但正是《电子世界争霸战》让我真正坚定了这个想法。突然间,我仿佛看到了自己成为程序员的样子——创建智能程序,统治网络世界。是的,我知道,当时我也是个书呆子。
然而,我在大学学习计算机科学专业时,我的梦想很快就变成了现实。首先——我发现“嘿,我擅长数学!”这句话在遇到微积分 3 时毫无意义,其次,我发现我对这种或那种排序的性能并不感兴趣。我转到了英语专业(一直是个不错的选择),但一直都在接触电脑。正是在这段时间里,我接触到了 Mosaic 和早期网络。
我很快进入了网络,因为——好吧,我直白地说——比我之前接触过的编程要容易得多。我还记得 LiveScript。我还记得我的第一个 Perl CGI 脚本。这并不完全是“光轮”编码,但它更简单、更有趣,而且实际上很前沿。我已经将成年生活的大部分时间都花在了作为 Web 开发者的工作上,虽然我确实幻想着网络是一个原始的环境,但它对我(以及其他数百万人)来说一直都是很好的选择,而且我很乐意看到它随着时间的推移而发展。
Web 技术发展最令人着迷的方式之一是在网络之外。在本文中,我将探讨所有可以在非网络环境中重用我们的基于 Web 的技术(HTML、JavaScript 和 CSS)的方法。虽然说一个人不应该学习其他技术,或者说 Web 标准在任何地方、任何情况下都能正常工作是荒谬的,但我坚信 Web 背后的技能对于各个学科的许多人来说都是开放的——无论你是否获得了计算机科学博士学位!
移动
这通常是我讨论移动设备重要性的部分,但现在是 2014 年,我认为我们已经过了那个阶段。移动开发通常涉及 Java(Android)或 Objective-C(iOS)。开发人员还可以使用 Web 标准来构建原生应用程序。其中一个解决方案是 Apache Cordova(又名 PhoneGap)。
Cordova 使用一个包装在原生应用程序中的 Web 视图,允许 Web 开发人员构建通常被称为混合应用程序的应用程序。除了提供一种将 HTML 轻松放入应用程序的方法外,Cordova 还提供了一系列不同的插件,可以让你做一些典型的网页在设备上无法做的事情。例如,你可以轻松访问相机
navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
destinationType: Camera.DestinationType.DATA_URL
});
function onSuccess(imageData) {
var image = document.getElementById('myImage');
image.src = "data:image/jpeg;base64," + imageData;
}
function onFail(message) {
alert('Failed because: ' + message);
}
你还可以使用加速度计、GPS、联系人、文件系统等等。Cordova 提供了一个 JavaScript API,用于处理与后端原生代码的通信。最棒的是,同一代码可用于构建适用于多个不同平台(包括 Firefox OS,现在已在 Cordova 和 PhoneGap 中提供支持)的原生应用程序。
需要澄清的是,这并不是说你可以将现有的网站打包起来。移动应用程序的本质——与简单的网站完全不同。但是,你可以使用你现有的知识,这为开发人员节省了大量的时间。
另一个例子(希望本网站的读者都很熟悉)是 Firefox OS。与 Cordova 不同,开发人员不必将 HTML 包装在 Web 视图包装器中。整个操作系统都是基于 Web 标准的。让 Firefox OS 更令人着迷的是对托管应用程序的支持。Firefox OS 是一个新的平台,你的访问者使用该平台的设备的可能性很小。但是,使用托管应用程序,我可以轻松地为设备上的安装提供支持,同时仍然从传统的 URL 运行我的应用程序。
考虑一下我构建的一个名为 INeedIt 的简单演示。如果你在 Chrome 中访问此应用程序,它可以正常工作。如果你在 Android 或 iOS 上的移动浏览器中访问它,它也可以正常工作。但是,如果你使用 Firefox 访问它,代码将触发,询问你是否要安装该应用程序。以下是处理此问题的代码块。
if(!$rootScope.checkedInstall && ("mozApps" in window.navigator)) {
var appUrl = 'http://'+document.location.host+'/manifest.webapp';
console.log('havent checked and can check');
var request = window.navigator.mozApps.checkInstalled(appUrl);
//silently ignore
request.onerror = function(e) {
console.log('Error checking install '+request.error.name);
};
request.onsuccess = function(e) {
if (request.result) {
console.log("App is installed!");
}
else {
console.log("App is not installed!");
if(confirm('Would you like to install this as an app?')) {
console.log('ok, lets try to install');
var installRequest = window.navigator.mozApps.install(appUrl);
installRequest.onerror = function() {
console.log('install failure: '+this.error.name);
alert('Sorry, install failed.');
};
installRequest.onsuccess = function() {
console.log('did it');
alert('Thanks, app installed!');
};
}
$rootScope.checkedInstall=true;
}
};
} else {
console.log('either checked or non compat');
}
非常简单,对吧?我喜欢的部分是,除了 Firefox OS 之外的任何地方都完全忽略了这段代码,但对于使用该操作系统的用户来说,它会自动增强。我不会冒任何风险,但可以为他们提供一种将我的应用程序下载到设备屏幕上的方法。
桌面
当然,仍然有一些人每天坐在灰色盒子(或笔记本电脑)前工作。许多桌面应用程序已被网页取代,但仍有一些事情超出了 Web 应用程序的范围。有时,桌面应用程序更有意义。幸运的是,也有多种方法可以使用 Web 标准来构建它们。
所以你知道我刚刚给你的代码示例吗?那个让 Firefox OS 用户有机会从网页上安装应用程序的代码?完全相同的代码在桌面上也能工作。虽然它仍在开发中(事实上,我构建的应用程序由于地理定位错误而无法工作),但它最终将允许你将基于 Web 的应用程序推送到移动 Firefox OS 用户以及其他十亿台桌面用户。这是我自己的应用程序文件夹中安装的应用程序。
但我之前说过,这仍然是一个相对较新的技术,需要再过一段时间才能投入使用。你现在可以使用的技术是 Node Webkit。这个开源项目允许你将 Node.js 应用程序包装在桌面外壳中。然后可以为 Windows、Mac 和 Linux 创建可执行文件。你可以获得“真实”桌面应用程序的所有功能,同时使用 Web 标准作为你的平台,操作起来更加轻松。已经有越来越多的 应用程序列表 在使用该框架——我甚至在意识到它们在幕后使用 Node Webkit 之前就使用过其中一些应用程序。
例如,可以查看 A Wizard’s Lizard,这是一个随机地牢和精彩游戏玩法的 RGP 游戏。
原生应用程序扩展
在上一节中,我们介绍了使用 Web 标准构建的应用程序。如今,也有许多原生构建的应用程序可以通过 Web 标准进行扩展。作为 Web 开发人员,你可能已经熟悉 Firefox 附加组件和 Chrome 扩展程序。对于你能想到的任何需求,都存在着一个非常丰富的浏览器扩展生态系统。然而,我感兴趣的是使用 Web 标准来打开其他产品。
你知道吗?Photoshop(是的,Photoshop)现在可以通过 Node.js 进行扩展?这个名为“Adobe Generator”的可扩展性层允许使用基于脚本的界面访问该产品。其中一个例子是根据简单的命名方案从图层生成 Web 资源。如果你曾经不得不手动创建 Web 资源并从 PSD 中更新它们,你就会很欣赏这一点。但是,整个功能都是由 JavaScript 驱动的,并且都使用了你可以构建在之上的公共 API。你可以通过 GitHub 访问 代码和示例。
接下来呢?
从一个在该行业工作了太久的人的角度来看,我可以说,我很幸运 Web 标准已经成为创新和创造力的驱动力。但这不是促成这种进步的原因。正是许多人、公司和组织(如 Mozilla)的辛勤努力创造了我们今天拥有的肥沃土壤。为了继续这种动力,我们需要每个人都参与进来,向其他人宣传,并成为由每个人为每个人创建的网络的支持者。
关于 Raymond Camden
Raymond Camden 是 Adobe 的开发人员。他的工作重点是客户端开发、移动应用程序、Node.js 和 ColdFusion。他是一名已出版的作家,并在各种会议和用户组上发表演讲。可以通过他的博客 (www.raymondcamden.com)、Twitter 上的 @raymondcamden 或通过电子邮件 raymondcamden@gmail.com 联系 Raymond。
关于 Robert Nyman [名誉编辑]
Mozilla Hacks 的技术布道者和编辑。发表演讲并撰写有关 HTML5、JavaScript 和开放网络的博客。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年以来一直在从事 Web 前端开发工作——在瑞典和纽约市。他经常在 http://robertnyman.com 上写博客,并喜欢旅行和结识新朋友。
14 条评论