Javascript 从网络驱动器打开XML并准备好解析

Javascript 从网络驱动器打开XML并准备好解析,javascript,xml,greasemonkey,network-drive,Javascript,Xml,Greasemonkey,Network Drive,我为开发人员编写了一个GreaseMonkey脚本,如果他们点击我们的bug报告工具中的特定文本区域,它会生成一个弹出式GUI。现在我想更改该脚本,以从我们的网络驱动器之一的XML中获取GUI的格式,该网络驱动器为每个人映射,因此我不必更改脚本,他们也不必每次更改状态日志的所需格式时都重新安装它 问题是,我无法打开xml文件。我正试图用我在w3schools上找到的代码来实现它: function loadXMLDoc(filename) { if (window.XMLHttpReq

我为开发人员编写了一个GreaseMonkey脚本,如果他们点击我们的bug报告工具中的特定文本区域,它会生成一个弹出式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>
onload不会返回任何未定义的内容,但是当加载页面时,我会将responseText发送到控制台日志。
我试图添加setTimeout,或者使GM_xmlhttpRequest同步,但到目前为止失败了。

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

在FF+GM中仍然不起作用,但在chrome中使用Monkey也可以,但这也可能解决这个问题:


尝试在js中使用标准url语法和/而不是\转义符号。此外,您只需将文件拖放到浏览器中,它就会显示正确的文件://urlfile:///y:/path/to/file/note.xml. 这似乎是可行的,但后来我明白了,XMLHttpRequest已经过时了,对用户体验来说太糟糕了。我认为这是因为主线程上的同步请求,它会使页面重新加载。我应该改用什么?请尝试使用记住将其添加到metablock/@grant GM_xmlhttpRequest。而且要避开学校:-你说这似乎有效。这根本不应该起作用!您使用的浏览器和Greasemonkey的版本是什么?您在浏览器控制台上收到了哪些错误消息?
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);
        }
    });
}