再一次借助 XPConnect 使用通过 XPCOM 部署的本地文件库。在这个例子中,使用来自此组件的相应的读取 API,以读取写入 清单 7 的文件。这时,也会调用 deserialize() 方法,如清单 11 所示。
清单 11. deserialize() 函数
function deserialize(input){
var obj = input.parseJSON();
document.getElementById("name").value = obj.name;
document.getElementById("entry").value = obj.entry;
document.getElementById("tags").value = obj.tags;
document.getElementById("pubDate").value = obj.pubDate;
}
此函数再一次使用了 JSON 库。此时它获取了从本地文件读取的串,并将其转换到一个 JavaScript 对象中。然后可以用这个对象的属性来设置 UI 控件中的值。惟一的例外是画布签名。您将它保存为一个数据 URL,但该格式不能在编辑时重载。您可以用图像标记显示它,就像在 Preview 中一样。
发布条目
您的应用程序可以从本地磁盘读取和写入条目,而且可以在博客条目中预览HTML布局。下一个逻辑步骤是将它与Web服务连接,以在线发布博客条目。为此,使用 XPConnect 和 XPCOM 来访问包含在XUL中的连网 API。如果使用 XMLHttpRequest 将所有内容写入到浏览器中时,也可以执行上面的方法。这在XUL中所有的 JavaScript 函数中都是可行的,就像运行在浏览器中的所有 JavaScript 文件一样。清单 12 显示了实现此功能的一些代码。
清单 12. 使用 XMLHttpRequest()
var xhr = new XMLHttpRequest();
function publish(){
var url = "http://some.blogService.com/sendBlog"; // replace this obviously
var serializedEntry = serialize();
xhr.onreadystatechange = processResponse;
xhr.open("POST", url, true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// set-up authentication headers and/or parameters
// then send the request
xhr.send(serializedEntry);
}
function processResponse(){
// check for readyState == 'loaded'
if (xhr.readyState == 4){
if (xhr.status == 200){
alert("Your blog entry was published!");
} else {
alert("Sorry there was an error");
}
}
}
在 清单 12 中需要注意的关键是,其中的代码跟实现从Web页面调用 Ajax 而编写的代码类型相同。最大的区别在于,不用担心 Internet Explorer 的不同版本,或者甚至是 Firefox(或者 Safari、Opera 和其他浏览器)的不同版本。这在很大程度上简化了 XMLHttpRequest 的使用。
更多的XUL开发
您仅仅使用XUL创建了一个简单的桌面应用程序。如果您是一个Web应用程序开发人员,那么XUL可以为您开启一个崭新的世界。您还应该了解XUL开发的更多具体类型。首先是为 Firefox 和其他基于 Mozilla 的浏览器编写扩展。
Firefox 扩展开发
XUL 开发的一个最流行的类型就是编写 Firefox 扩展。用XUL进行桌面开发和扩展开发有两个主要的区别。最重要的一个是,扩展需要安装清单文件。这个文件必须命名为 install.rdf,并且必须放在应用程序的根目录下。这个文件是包含有关扩展的重要元数据的存储库。您可能想为扩展创建一个图标。这可以通过创建图标文件并将其放到 /chrome/icons/default/ 目录中来实现。在 Windows 中,这是一个 .ico 文件,而在 Linux 中为一个 .xpm 文件。它的名称和主窗口的 ID 匹配。因此,如果主窗口的 ID 为 “xulBloggerMain”,那么就需要一个 xulBloggerMain.ico 和一个 xulBloggerMain.xpm。
XPCOM 开发
如果做过足够多的XUL开发,也许想创建自己的 XPCOM 组件。为此,需要 Gecko SDK。可以下载此文件并当作一个二进制文件,或者从头构建。SDK 包含大量 C++ 头文件和用于基础 Gecko XPCOM 组件的 IDL 文件,以及用于创建 XPCOM 组件的命令行工具。要开发 XBL,将XUL控件绑定到您开发的 XPCOM 组件上,Spket IDE 将会非常有用。
结束语
在本教程中,您了解了XUL的功能及其架构,以及一些开发XUL应用程序的工具。您还构建了一个不错的应用程序,它使用了XUL和 Firefox 中的一些高级组件。您了解了开发人员如何使用他们的Web开发技能通过XUL创建桌面应用程序。Firefox 3.0 的广泛采用意味着,Firefox 用户已经为XUL开发人员编写的桌面应用程序准备好XUL运行时,并且这存在巨大的市场。