【问题标题】:Open XML from network drive and making it ready to parse从网络驱动器打开 XML 并使其准备好解析
【发布时间】:2015-09-10 18:44:37
【问题描述】:

我为开发人员编写了一个 GreaseMonkey 脚本,如果他们单击我们的错误报告工具中的特定文本区域,它会弹出一个 GUI。
现在我想更改该脚本以从我们的一个网络驱动器(为所有人映射)上的 XML 获取该 GUI 的格式,因此我不必更改脚本,而且他们没有每次我们更改该状态日志的所需格式时重新安装它。

问题是,我无法打开 xml 文件。我正在尝试使用我在 w3schools 上找到的这段代码来获取它:

function loadXMLDoc(filename) 
{
    if (window.XMLHttpRequest)
    {
        xhttp=new XMLHttpRequest();
    } 
    else // code for IE
    {
        xhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.open("GET", filename, false);
    xhttp.send();
    return xhttp.responseXML;
}

var xmldoc = loadXMLDoc("file://///path\to\file\note.xml");
console.log(xmldoc.getElementsByTagName("body")[0].childNodes[0].nodeValue);

xml很简单,我只是放在那里测试:

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

我尝试了简单的路径语法,例如:

file://///y:\path\to\file\note.xml

还有一个绝对的 unc 路径:

file://///服务器名\path\to\file\note.xml

他们都没有工作。
我写了一些打印到控制台,脚本一直运行,直到我想使用 loadXMLDoc 函数,然后它似乎死了,它没有写任何错误。
这使问题变得更加困难,因为我无法访问要使用脚本的网页源,也无法访问将存储文件的服务器管理。

@编辑:

FireFox 是 40.0.3,GreaseMonkey 是 3.3,如果我添加 @grant GM_xmlhttpRequest 脚本会中断。
现在我在 Tampermonkey 中使用它:

var xmlText = xmlRequest("http://path/to/file/note.xml");
unsafeWindow.console.log(xmlText);

function xmlRequest(path) { 
     GM_xmlhttpRequest({
        method: "GET",
        url: path,
        onload: function(response) {
            unsafeWindow.console.log(response.responseText);
            return response.responseText;
        },
        onerror: function(reponse) {
            unsafeWindow.alert("error: ", reponse);
        }
    });
}

onload 不返回任何内容(未定义),但是当页面加载时,我将 responseText 发送到控制台日志。
我正在尝试添加 setTimeout,或者使 GM_xmlhttpRequest 同步,但到目前为止失败了。

【问题讨论】:

  • 尝试使用/而不是\(js中的转义符号)的标准url语法。此外,您可以简单地将文件拖放到浏览器中,它会显示正确的file:// url。
  • 然后我得到file:///y:/path/to/file/note.xml。它似乎有效,但后来我知道 XMLHttpRequest 已经过时并且对用户体验来说很糟糕。我认为这是因为主线程上的同步请求,它会使页面重新加载。我应该改用什么?
  • 尝试使用GM_xmlhttpRequest(记得将其添加到元块// @grant GM_xmlhttpRequest)。并避免使用 w3schools :-)
  • 您说“它似乎有效”。它根本不应该工作!您使用的是什么版本的浏览器和 Greasemonkey?您在浏览器控制台上收到了哪些错误消息?

标签: javascript xml greasemonkey network-drive


【解决方案1】:

我用这里提到的回调解决了编辑部分:

https://stackoverflow.com/a/5485561/5271745

它仍然无法在 FF+GM 中工作(Chrome 中的 TamperMonkey 还可以),但也许这也能解决这个问题:

https://stackoverflow.com/a/25226796/5271745

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 2019-12-16
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2012-02-12
    相关资源
    最近更新 更多