使用javascript保存XHR文件

时间:2016-03-21 13:47:40

标签: javascript xmlhttprequest greasemonkey

我想保存一个带有POST请求的登录后页面上请求的JSON文件。因为没有可用的API,所以我想下载使用Greasemonkey将页面加载为JSON文件时调用的脚本的响应。

该网页类似于domain.com/map,在加载期间调用domain.com/map/script: <iframe name="menuFrame" src="menu.htm" frameborder="1"> </iframe> <iframe name="contentFrame" src="content.htm" frameborder="1"> </iframe> <iframe name="footerFrame" src="footer.htm" frameborder="1"> </iframe>。 domain.com/map/script的响应是我想要保存的实际JSON响应(本地甚至更好地使用FTP)。

1 个答案:

答案 0 :(得分: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