【发布时间】: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