使用JavaScript保存XHR文件

4
我希望能够通过POST请求保存一个JSON文件,这个JSON文件是在登录后的页面中请求的。由于没有API可用,我想使用Greasemonkey下载页面加载时调用的脚本的响应作为JSON文件。页面的地址类似于domain.com/map,在加载时调用了domain.com/map/script脚本:<script type="text/javascript" charset="utf-8"> function open() {$.ajax{{ url: "/script", type: "POST", dataType: "json",), [...] }); }; function functionname(value){ [...] }; open();。domain.com/map/script的响应是我想要保存的实际JSON响应(本地或最好使用FTP)。

2
https://github.com/rndme/download 使得实际的保存部分变得微不足道,您可以处理其余的繁琐事务... - dandavis
1
我认为这回答了你的问题。https://dev59.com/Om865IYBdhLWcg3wLbar - Henry
1个回答

3

以下是完整演示代码:

(function (fetch, console) {

    fetch('https://api.stackexchange.com/2.2/questions/36132760?site=stackoverflow')
        .then(res => res.json())
        .then(data => console.save(data));

    console.save = function (data, filename) {

            if (!data) {
                console.error('Console.save: No data')
                return;
            }

            if (!filename) filename = 'console.json'

            if (typeof data === "object") {
                data = JSON.stringify(data, undefined, 4);
            }

            var blob = new Blob([data], {type: 'text/json'}),
                e    = document.createEvent('MouseEvents'),
                a    = document.createElement('a');

            a.download = filename;
            a.href = window.URL.createObjectURL(blob);
            a.dataset.downloadurl =  ['text/json', a.download, a.href].join(':');
            e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            a.dispatchEvent(e);
    };

}).call(this, window.fetch, window.console || {});

请查看devtools-snippets#console-save以了解更多信息。


谢谢!您能否为我的情况发布一个代码示例?我想给出赏金! - Scripter
1
@Remco 我已经在上面添加了完整的演示代码,为了帮助你,我使用了一些ES6语法。 - Cotton
我想将这个脚本作为Greasemonkey的UserScript使用。它需要等待“domain.com/map/script”响应到来(当调用“domain.com/map”,$.ajax({ url: "/script", type: "POST", dataType: "json",)时,然后保存它。对此有什么想法吗? - Scripter
1
只需在响应回调函数中执行保存即可,例如:$.ajax().then(data => console.save(data)) - Cotton
是的,但由于我无法编辑页面,所以我需要一个浏览器脚本在加载时编辑页面(阻止页面的JS并插入一个带有保存功能的新JS)。 - Scripter
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接