首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有什么办法可以解决网站破坏console.log问题吗?

有什么办法可以解决网站破坏console.log问题吗?
EN

Stack Overflow用户
提问于 2016-02-10 09:47:38
回答 3查看 190关注 0票数 1

我的Chrome DevTools控制台节选:

代码语言:javascript
运行
复制
Navigated to https://twitter.com/
console.log.toString();
"function (){}"
Navigated to http://linuxfr.org/
console.log.toString();
"function log() { [native code] }"

我使用Chrome扩展成功地将代码注入到twitter.com的主框架中,但我很难理解为什么我的代码似乎没有运行。看来我的代码运行得很好,除了console.log完全没有产生任何结果!

问:有没有一种方法可以将“现在消失的”console.log称为“本机代码”?

(关于那种JavaScript "WAT“行为的评论,某种程度上)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-10 12:02:07

因为这是一个Chrome扩展,所以您可以将内容脚本设置为run_at: "document_start" --(理论上)可以在twitter得到它们之前“抓取”console.log / error / dir / info等等。

实际上,知道twitter只取代了日志、警告、信息、错误,你可以简单地做:

代码语言:javascript
运行
复制
var _console = ['log', 'warn', 'info', 'error'].reduce(function(result, key) { 
    result[key] = console[key].bind(console); 
    return result
}, {});

然后你可以使用_console.log和朋友

票数 1
EN

Stack Overflow用户

发布于 2016-02-10 09:56:25

据我所知,这取决于更换的深度。例如,如果是这样

代码语言:javascript
运行
复制
 console.log = function () {};

原始的本机log函数仍在原型中。您可以使用__proto__属性或Object.getPrototypeOf方法访问它。

代码语言:javascript
运行
复制
console.log = null
Object.getPrototypeOf(console).log
//log() { [native code] }

此外,您也可以从原始控制台对象中删除替换。

代码语言:javascript
运行
复制
delete console.log
//true
console.log
//log() { [native code] }

但是,如果像这样替换日志函数,上述所有代码都无法工作。

代码语言:javascript
运行
复制
console.__proto__.__proto__.log = function () {}

不幸的是,我不知道这个案子的解决办法。

票数 1
EN

Stack Overflow用户

发布于 2016-02-10 10:15:14

基于上面的讨论和@JaromandaX和JavaScript:权威指南,下面是一个简单的填充。

代码语言:javascript
运行
复制
function log() {
    if (location.hostname === 'twitter.com'){
        Object.getPrototypeOf(console).log.apply(console, arguments);
    } else {
        console.log.apply(console, arguments);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35311671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档