我有一个XULRunner应用程序。它主要是工作,但我有一个问题。应用程序中有一些报告实现为HTML表单。用户的一个选项是输出为CSV格式。在Firefox中,要求用户保存文件或打开它(在Excel或其他任何方式)。在XULRunner应用程序中,我得到一个包含以下内容的弹出窗口:
XML解析错误:未定义的实体
位置:chrome://mozapps/content/downloads/unknownContentType.xul
第30行,第18栏:& intro.label;
这似乎与所讨论的品牌有关here:
我想我已按照说明操作了。他们在某些地方有点模糊。这就是我所拥有的:
chrome/chrome.manifest
包含:
locale branding en-US chrome/locale/branding/
content branding chrome/branding/
chrome/branding/
包含以下文件:about.png
,icon48.png
,icon64.png
chrome/locale/branding/brand.dtd
包含:
<!ENTITY brandShortName "ArcaMax EC">
<!ENTITY brandFullName "ArcaMax EC">
<!ENTITY vendorShortName "ArcaMax">
<!ENTITY trademarkInfo.part1 " ">
chrome/locale/branding/brand.properties
包含:
brandShortName=EC4
brandFullName=ArcaMax EC4
vendorShortName=ArcaMax
homePageSingleStartMain=Firefox Start, a fast home page with built-in search
homePageImport=Import your home page from %S
homePageMigrationPageTitle=Home Page Selection
homePageMigrationDescription=Please select the home page you wish to use:
syncBrandShortName=Sync
chrome/locale/branding/unknownContentType.dtd
包含:
<!ENTITY intro.label "You have chosen to open">
<!ENTITY from.label "from:">
<!ENTITY actionQuestion.label "What should &brandShortName; do with this file?">
<!ENTITY openWith.label "Open with">
<!ENTITY openWith.accesskey "o">
<!ENTITY other.label "Other…">
<!ENTITY saveFile.label "Save File">
<!ENTITY saveFile.accesskey "s">
<!ENTITY rememberChoice.label "Do this automatically for files like this from now on.">
<!ENTITY rememberChoice.accesskey "a">
<!ENTITY whichIsA.label "which is a:">
<!ENTITY chooseHandlerMac.label "Choose…">
<!ENTITY chooseHandlerMac.accesskey "C">
<!ENTITY chooseHandler.label "Browse…">
<!ENTITY chooseHandler.accesskey "B">
<!ENTITY unknownPromptText.label "Would you like to save this file?">
添加chrome/locale/branding/unknownContentType.dtd
是我的一个猜测。我在firefox源代码树中找到了该文件。
有什么想法吗?
答案 0 :(得分:2)
看起来你的猜测是正确的,问题与品牌有关。 unknownContentType.xul
加载三个区域设置文件:
<!DOCTYPE dialog [
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
%brandDTD;
<!ENTITY % uctDTD SYSTEM "chrome://mozapps/locale/downloads/unknownContentType.dtd" >
%uctDTD;
<!ENTITY % scDTD SYSTEM "chrome://mozapps/locale/downloads/settingsChange.dtd" >
%scDTD;
]>
brand.dtd
是唯一不属于XULRunner的人,它必须由应用程序提供。但是,加载它显然会失败并阻止其他DTD文件加载(XULRunner会抱怨对话框中的第一个实体)。
现在您不需要将unknownContentType.dtd
放入您的扩展程序中,它已经是XULRunner的一部分。除此之外,你已经做好了一切。但是,chrome.manifest
中的路径应该相对于清单而不是应用程序根目录。所以路径可能应该是locale/branding/
而不是chrome/locale/branding/
。您应该在应用程序中打开chrome://branding/locale/brand.dtd
以验证它是否已正确设置。
另一个常见问题:DTD文件必须以UTF-8格式保存,不用 a byte order mark(BOM)。如果您的编辑器默认保存BOM,则需要重新配置它。 XULRunner会考虑以BOM开头的文件无效并忽略它们。