XML用户界面语言(XUL)开发入门(8)

再一次借助 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运行时,并且这存在巨大的市场。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值