【问题标题】:How to copy the objects from chrome console window?如何从 chrome 控制台窗口复制对象?
【发布时间】:2017-04-23 06:54:49
【问题描述】:

我尝试将对象复制为文本,但它只显示 [object object]。在此之前,我曾尝试使用 copy 表扬它是成功的,但不是现在。这是 chrome 问题吗?

我尝试了什么? 只需右键单击对象并从 chrome 控制台窗口存储为全局变量,然后接下来只需使用 copy(temp6) 命令并尝试粘贴到 notepad++ 中。


【问题讨论】:

  • 仅供参考,我也遇到了这个问题。不过,在我有限的测试中,当我尝试使用定义的方法复制对象时,似乎存在问题。如果我删除该方法,那么问题就消失了。我知道这不是一个解决方案,但它可能会帮助其他人弄清楚发生了什么。

标签: javascript google-chrome google-chrome-console


【解决方案1】:

理想情况下,它应该使用您编写的copy 命令复制对象。 我只是尝试过并为我工作。
您可以尝试做的其他事情是将该对象字符串化,然后复制它。
例如

copy(JSON.stringify(temp6))

【讨论】:

  • 它显示 Uncaught TypeError: Converting circular structure to JSON
  • @Jay 这有什么帮助?用户是否应该在每次想要对对象进行字符串化时将自定义 JSON 函数写入他们的 devTools?
  • 您可以右键单击一个对象并将其存储为全局变量。它很可能被称为“temp1”,之后您可以使用代码 sn-p,如下所示:JSON.stringify(temp1)。希望这能澄清一点。
  • 它显示“循环结构”警告,因为您的对象有循环,这使得无法序列化为 JSON。例如对象 A 具有指向对象 B 的属性,而 B 具有指向 A 的属性。
【解决方案2】:

有很多方法可以做到这一点。一种方法是执行JSON.stringify(yourObject),然后复制输出。

【讨论】:

  • 它显示 Uncaught TypeError: Converting circular structure to JSON
  • 这解释了为什么 copy 一开始就不起作用。有解释here
【解决方案3】:

您可以在控制台中使用如下命令: 假设我们的对象是:

  var object = {x:"xyz"}

现在在控制台中使用以下命令 -

 copy(JSON.stringify(object))

对象现在可用于剪贴板。您现在可以使用 Ctrl + v 来使用此对象。

【讨论】:

  • 它显示 Uncaught TypeError: Converting circular structure to JSON
【解决方案4】:

您应该检查count对象以避免循环引用,在使用copy(JSON.stringify(count))之前,请参阅here

【讨论】:

  • @5tormTrooper DevTools 内置 JSON 函数
【解决方案5】:

如果对象已经记录

  • 右键单击控制台中的对象,然后单击存储为全局
  • 变量输出类似于 temp1
  • 复制并粘贴下面的代码到 chrome 控制台并回车

    (function(console){
        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)
     }
    })(console)
    
    • 然后就可以使用下载功能了,

console.save(temp1);

-如果显示Uncaught TypeError: Converting circular structure to JSON

然后你需要回收 JSON 对象并将下面的代码粘贴到 chrome 浏览器控制台中并按回车

if (typeof JSON.decycle !== "function") {
    JSON.decycle = function decycle(object, replacer) {
        "use strict";

        var objects = new WeakMap();     // object to path mappings

        return (function derez(value, path) {


            var old_path;  
            var nu;  

            if (replacer !== undefined) {
                value = replacer(value);
            }

            if (
                typeof value === "object" && value !== null &&
                !(value instanceof Boolean) &&
                !(value instanceof Date) &&
                !(value instanceof Number) &&
                !(value instanceof RegExp) &&
                !(value instanceof String)
            ) {


                old_path = objects.get(value);
                if (old_path !== undefined) {
                    return {$ref: old_path};
                }

                objects.set(value, path);

                if (Array.isArray(value)) {
                    nu = [];
                    value.forEach(function (element, i) {
                        nu[i] = derez(element, path + "[" + i + "]");
                    });
                } else {

                    nu = {};
                    Object.keys(value).forEach(function (name) {
                        nu[name] = derez(
                            value[name],
                            path + "[" + JSON.stringify(name) + "]"
                        );
                    });
                }
                return nu;
            }
            return value;
        }(object, "$"));
    };
}


if (typeof JSON.retrocycle !== "function") {
    JSON.retrocycle = function retrocycle($) {
        "use strict";

        var px = /^\$(?:\[(?:\d+|"(?:[^\\"\u0000-\u001f]|\\([\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*")\])*$/;

        (function rez(value) {



            if (value && typeof value === "object") {
                if (Array.isArray(value)) {
                    value.forEach(function (element, i) {
                        if (typeof element === "object" && element !== null) {
                            var path = element.$ref;
                            if (typeof path === "string" && px.test(path)) {
                                value[i] = eval(path);
                            } else {
                                rez(element);
                            }
                        }
                    });
                } else {
                    Object.keys(value).forEach(function (name) {
                        var item = value[name];
                        if (typeof item === "object" && item !== null) {
                            var path = item.$ref;
                            if (typeof path === "string" && px.test(path)) {
                                value[name] = eval(path);
                            } else {
                                rez(item);
                            }
                        }
                    });
                }
            }
        }($));
        return $;
    };
}
  • 然后最后执行下载代码。

console.save(JSON.decycle(temp1));

【讨论】:

  • 实际上,对象没有正确复制,只有[0]是正确的,其余的都不正确
  • 它对我有用,非常感谢。哦,毕竟不用save,可以用copy(JSON.decycle(temp1))把temp1保存到剪贴板
  • 由于缺少功能,稍后评论“最喜欢”这个答案。 meta.stackexchange.com/questions/2588/…
  • console.save(temp1);为我工作,我发现需要回收它。感谢您的 sn-p 这节省了时间
  • 传奇! :心:
【解决方案6】:

您也可以这样做而无需编写任何代码。至少在更高版本的 chrome 中。

当您右键单击对象时,您将获得以下上下文:

但是,如果您左键单击该行以突出显示它,右键单击控制台行,您将获得此上下文菜单:

“另存为...”选项将创建控制台日志中当前“原样”所有内容的文本文件 (*.log)。因此,如果您想查看更多对象,只需将其扩展至您需要的范围即可。

折叠示例:

let tmpArr = []; tmpArr.push([]); tmpArr[0].push({ some: 'test'}); tmpArr[0].push({ some: 'next'}); console.log(tmpArr);
VM242:1 [Array(2)]0: (2) [{…}, {…}]length: 1[[Prototype]]: Array(0)
undefined
null
null

扩展示例:

let tmpArr = []; tmpArr.push([]); tmpArr[0].push({ some: 'test'}); tmpArr[0].push({ some: 'next'}); console.log(tmpArr);
VM242:1 [Array(2)]0: Array(2)0: some: "test"[[Prototype]]: Object1: some: "next"[[Prototype]]: Objectlength: 2[[Prototype]]: Array(0)length: 1[[Prototype]]: Array(0)
undefined
null
null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    相关资源
    最近更新 更多