背景故事
我编写了一个专门用于 GreaseMonkey 和 Google Chrome 的图像内联脚本。它应该下载 PNG 文件并将它们存储在图像 src
属性中的 data:
url 中。这听起来可能很荒谬,但是某个网站将 Content-Disposition
设置为 attachment
用于图像,我不希望每次都弹出 «Save As» 对话框。
实际问题
脚本使用 XMLHttpRequest
获取数据,将其编码为 base64 并将其存储在适当的位置。到目前为止,很好。但它只有在我通过 Firebug 和 Chrome 开发控制台运行它时才有效,而当我将它用作适当的用户脚本时则无效。据我所知,这是因为 Greasemonkey 脚本不能直接使用 XMLHttpRequest
对象,而应该依赖对 GM_xmlhttpRequest
的调用。但是,我无法以这种方式将 responseType
设置为 "blob"
或 "arraybuffer"
,并且 binary
参数似乎仅适用于通过 POST 请求发送数据。我只得到 Unicode 字符串。
为了以防万一,图片是从与链接到它们的页面相同的域提供的。我相信它满足 «same origin» 的要求。
http://wiki.greasespot.net/GM_xmlhttpRequest这是 GM_xmlhttpRequest 文档。
有没有办法从 Greasemonkey 用户脚本中获取 arraybuffer
?
最佳答案
如果它是同域,那么您可以使用XMLHttpRequest
,没有问题。使用 GM_xmlhttpRequest
(目前有一个残缺的功能子集)的唯一原因是图像/文件是否跨域。
对于同域,您可以使用 XHR2,如 this answer 所示。 .
对于跨域,您必须:使用GM_xmlhttpRequest
,覆盖mime-type,并使用自定义编码器算法。同样,这都显示在 that same answer 中。 .
但是, 听起来您只是想让下载图片变得更容易?如果是这样,那么使用优秀的 DownThemAll extension 可能会更好.
关于javascript - 如何从 GreaseMonkey 用户脚本请求二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10786710/