Chrome Omnibox 特殊字符抛出错误

Tyl*_*ler 3 javascript json google-chrome google-chrome-extension omnibox

我正在编写一个基本的 Chrome 扩展程序,以从 JSON 提要在多功能框中添加建议。几乎所有输入的查询都会在建议下拉菜单中按预期显示结果。

然而,似乎每当一个与号 (&) 作为描述的一部分被返回时,Chrome 就会抛出一个错误。

抛出的错误读取"xmlParseEntityRef: no name(...)"并从parseOmniboxDescriptionChrome 中的方法调用。

对此事的任何帮助将不胜感激。我不确定这是否是唯一有这个问题的角色,或者它是否更普遍。

小智 5

多功能框建议的当前 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"
Run Code Online (Sandbox Code Playgroud)

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

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