【问题标题】:Parse XML Output with Javascript for a Chrome Extension?使用 Javascript 为 Chrome 扩展解析 XML 输出?
【发布时间】:2011-09-06 13:12:18
【问题描述】:

哇,是的,疯狂的标题。

但是说真的,我有一个小难题,我正在尝试开发一个 chrome 扩展,它非常简单地从服务器上的脚本中获取 XML 输出并以令人愉悦的方式显示它。

这是 XML 结果

<foo>
<level>3</level>
<message>
No Additional Information
</message>
</foo>

基本上我需要做的就是为每个级别添加一个条件语句并显示消息。但是,我似乎根本无法让 XHR 正常工作。

我的清单文件确实对 XML 文件和托管它的整个域具有权限(目前用于调试目的)。

自从我使用 javascript 以来已经有很多年了,事情已经发生了翻天覆地的变化。我正在抄袭为 Firefox 编写的扩展以完成工作,这也无济于事。

有什么想法吗?

编辑:

为了澄清我对我需要的 if 语句没问题,实际上启动 XHR 应该没问题,我的问题是处理 XML 文件中的数据。

【问题讨论】:

    标签: javascript xml google-chrome google-chrome-extension xmlhttprequest


    【解决方案1】:

    当您使用 XmlHttpRequest (XHR) 获取 XML 文件时,您可以使用 responseXML 指定对请求的响应。响应将被解析为文本/xml 流。

    responseXML 的结果将是一个 DOM Document 对象。您可以使用 document.* 下的任何 JavaScript API,例如 document.getElementByIddocument.querySelector 等。它们都在上面的 Document 链接中定义。

    如果您的 responseXML 返回 null,则表示服务器未抛出正确的 mimetype。您可以使用 overrideMimeType before calling send()` 覆盖 mimetype。

    例如

    (同步XHR,你也可以通过指定onreadystatechange来做异步):

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://example.com/db.xml');
    xhr.overrideMimeType('text/xml');
    xhr.send(null)
    
    var root = xhr.responseXML;
    var someidDOM = root.getElementById('someid');
    

    请记住,要使其正常工作,您应该将该代码放在Background Page 中并让permission 访问该资源。您可以使用的 match patterns 可以是 URL 本身:

    {
      // Required
      "name": "My Extension",
      "version": "1.0",
    
      "background_page": "background.html",
      "permissions": [ "http://example.com/db.xml" ]
    }
    

    希望这将帮助您入门!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多