XUL访问资源和应用程序结构

时间:2011-06-28 16:28:29

标签: resources xul structure

所以我是XUL的新手。

作为一种语言,它似乎很容易,而且我已经非常方便了javascript,但我无法理解的是你从清单文件或xul文件访问资源的方式。所以我做了“XULRunner入门”教程... https://developer.mozilla.org/en/getting_started_with_xulrunner 而且我比以前更困惑...所以我希望有人可以让我直截了当。

这就是为什么......(你可能想要打开这个教程)。

清单文件,prefs.js和xul文件都引用了一个名为'myapp'的包,如果到目前为止我在MDN上读到的所有东西都可以信任,那意味着在chrome目录中必须有一个jar文件或目录名为myapp,但两者都没有。整个应用程序的根目录称为myapp,但我称之为完全不同的东西,它仍然有效。

当我放置内容文件夹时,在另一个名为'foo'的文件夹中,并将所有对'myapp'的引用更改为'foo',因此我想创建一个'foo'包,弹出窗口通知我它不能找到'chrome://foo/content/main.xul',虽然这正是它的确切位置。

同样在xul文件中,它链接到'chrome:// global / skin /'中的样式表,该样式表不存在。然而,有些东西覆盖了我尝试对按钮进行的​​任何内联样式。当我创建一个css文件并将其指向它时,程序甚至都没有运行。

有人可以解释这里有什么奇怪的魔法......我很困惑。

2 个答案:

答案 0 :(得分:1)

content中注册chrome.manifest文件夹时,您必须使用以下格式:

content packagename uri/to/files/ [flags]

uri/to/files/可以是清单的绝对位置或相对位置。也就是说,包含文件夹的名称相对于包名称无关紧要;关键是告诉chrome如何解析以下形式的URI:

chrome://packagename/content/...

packagename只是创建了一个映射到磁盘上文件位置的映射(无论在哪里)。

答案 1 :(得分:1)

chrome协议定义了逻辑包结构,它只是将一个URL映射到另一个URL。磁盘上的结构可能完全不同,文件甚至可能不在磁盘上。当协议处理程序遇到类似chrome://foo/content/main.xul的地址时,它会检查:“我们是否有某个清单条目定义了包foo的内容映射?”如果它然后找到content foobar file:///something/ - 它并不关心该URL是否引用文件,它只会将main.xul相对于file:///something/解析,从而导致file:///something/main.xul。因此,file:///something/browser.xul将是最终将从中读取数据的网址 - 但您也可以将Chrome包映射到另一个Chrome网址,jar网址或其他内容(理论上您甚至可以使用http,但这是因安全原因被禁止。)

如果你查看Firefox / XULRunner目录,你会看到另一个chrome.manifest(在Firefox 4/5中,它位于omni.jar文件中)。例如,这就是定义global包的映射的地方。