Chrome Omnibox特殊字符引发错误

时间:2016-03-04 17:19:09

标签: javascript json google-chrome google-chrome-extension omnibox

我正在编写基本的Chrome扩展程序,以便通过JSON Feed在多功能框中添加建议。几乎所有输入的查询都会在建议下拉列表中按预期显示结果。

但是,似乎只要在描述中返回&符号(&),Chrome就会抛出错误。

抛出的错误显示为"xmlParseEntityRef: no name(...)",并通过Chrome中的parseOmniboxDescription方法调用。

对此事的任何帮助将不胜感激。我不确定这是否是唯一存在该问题的角色,或者它是否更广泛。

1 个答案:

答案 0 :(得分:3)

多功能框架建议的当前API要求将它们指定为编码的XML文本,而不仅仅是纯文本。包括&在内的某些字符需要进行适当编码。

要在浏览器JavaScript中对整个XML字符串进行编码,您可以执行以下操作:

function encodeXml(s) {
  var holder = document.createElement('div');
  holder.textContent = s;
  return holder.innerHTML;
}

console.log(encodeXml("Good & Bad > Bad & Good"));
// "Good & Bad > Bad & Good"

如果在将文本传递给多功能框API之前对文本执行此操作,则错误应该消失。

根据the documentation,您可以使用<url><match><dim>来进一步注释您的结果。但是,您可能希望使用更加结构化的XML构建方法,而不是简单地连接字符串。 (我不知道这些XML元素是否具有任何属性,但如果它们有,则上面的方法可能不足以编码属性值。)