2012-09-18 56 views
0

我有一个XULRunner应用程序。它主要是工作,但我有一个问题。应用程序中有一些报告以HTML表单的形式实现。用户的选项之一是输出为CSV格式。在Firefox中,用户被要求保存文件或打开它(在Excel或其他)。在XULRunner的应用程序,我得到含有弹出:从XULRunner浏览器标签打开CSV文件

XML Parsing Error: undefined entity
Location: chrome://mozapps/content/downloads/unknownContentType.xul
Line Number 30, Column 18: &intro.label;

这似乎是与品牌所讨论here

我想我已经遵循的指示。他们在地方有点模糊。以下是我有:

chrome/chrome.manifest包含:

locale branding en-US chrome/locale/branding/ 
content branding chrome/branding/ 

chrome/branding/包含以下文件:about.pngicon48.pngicon64.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源代码树中找到了该文件。

任何想法?

回答

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开始的文件无效并忽略它们。

+0

修复它,谢谢 – nicktook