从XULRunner浏览器标记打开CSV文件

时间:2012-09-18 18:31:30

标签: xulrunner

我有一个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.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源代码树中找到了该文件。

有什么想法吗?

1 个答案:

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