是否可以为URL使用相对路径?
changelog.htm
与options.xul
在同一目录中
options.xul
剖面图
<setting title="&options.changelog.title;" type="control">
<button label="&options.changelog.label;"
oncommand="openDialog('chrome://myAddon/content/changelog.htm', '',
'dialog=no, modal=no, resizable=yes, width=500, height=600');"/>
</setting>
有其他选择吗?
更新:
如果我尝试以下操作,我会在控制台中得到一个错误"NS_ERROR_MALFORMED_URI:"
<setting title="&options.changelog.title;" type="control">
<button label="&options.changelog.label;"
oncommand="openDialog('changelog.htm', '',
'dialog=no, modal=no, resizable=yes, width=500, height=600');"/>
</setting>
更新2:
我应该提到我的测试是在<em:optionsType>2</em:optionsType>
上进行的,正如下面的回答所解释的,它似乎不起作用。
是的,相对URL工作得很好。
我没有引用,但只是在我正在处理的扩展的选项对话框中尝试了一下。点击按钮后,下面的对话框打开得很好。它使用了文件test.xul
中的XUL,该文件与我的options.xul
文件(定义为instal.rdf
中的选项对话框)位于同一目录中:
<button label="test" oncommand="openDialog('test.xul', '',
'dialog=no, modal=no, resizable=yes, width=500, height=600');"/>
当test.xul文件位于相对位置test/test.xul
,但不存在于包含我的options.xul
:的目录中时,以下内容起作用
<button label="test" oncommand="openDialog('test/test.xul', '',
'dialog=no, modal=no, resizable=yes, width=500, height=600');"/>
从评论中移动:
然而,对于XUL来说,可能需要使用完整的URL来指定窗口。如果您的XUL实际上没有打开该窗口,您不一定知道当前的工作目录是什么。在这种情况下,使用相对URL路径可能会导致错误NS_ERROR_MALFORMED_URI:
和操作失败。对于显示在附加模块管理器中的选项对话框(即,它们不打开自己的窗口),这是绝对正确的。在您的install.rdf
文件中,选项<em:optionsType>2</em:optionsType>
将您的加载项的选项设置为显示在加载项管理器中。默认值<em:optionsType>1</em:optionsType>
将打开一个新的对话框窗口。
相对URL在单独的窗口中工作。例如,考虑外接程序对话框的情况,该对话框位于外接程序管理器中,打开另一个对话框窗口。在这种情况下,相对URL在现在打开的对话框窗口的XUL中工作得很好。