javascript - 如何从 GreaseMonkey 用户脚本请求二进制文件?

标签 javascript ajax google-chrome greasemonkey binary-data

背景故事

我编写了一个专门用于 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/

相关文章:

javascript - windows.resize 函数问题

javascript - Chrome 扩展程序可在所有页面中启用聊天机器人

android - 在 Firefox 上调试 CSS 动画性能

javascript - 如何在 html5 2d Canvas 绘图中组合多个剪切区域

javascript - 是否可以在模式窗口中转换所有 js 警报消息?

javascript - 使用 STS 凭证上传 aws-sdk - 403 错误

javascript - 如何将 XMLHttpRequest 发送到特定的 php 函数?

javascript - 在特定显示中隐藏按钮

javascript - 在 JavaScript 加载期间是否可以访问文件的一部分?

javascript - 延迟属性(Chrome)