pocket-manual icon indicating copy to clipboard operation
pocket-manual copied to clipboard

检测浏览器 DevTools 是否处于开启状态

Open FishPlusOrange opened this issue 6 years ago • 2 comments

个人认为比较好的方法是利用对象的 toString 方法进行检测。

其主要原理是,如果控制台输出的是对象,那么就会保留该对象的引用,每次打开控制台时都会重新调用该对象的 toString 方法并将返回结果打印到控制台。

这样,我们就可以通过自定义 toString 方法,以检测浏览器 DevTools 是否处于开启状态。

以函数为例:

let foo = () => {}

foo.toString = () => 'opening'

console.log('%s', foo) // opening

但需要注意的是,部分对象只会调用默认的 toString 方法,如 Object

let obj = new Object()

console.log('%s', obj) // Object

自定义 toString 方法:

let obj = new Object()

obj.toString = () => 'opening'

console.log('%s', obj) // Object

如果想让其调用自定义的 toString 方法,可以使用以下方式:

let obj = new Object()

obj.toString = () => 'opening'

console.log('%s', obj + '') // opening

以上基于 Chrome 浏览器

参考:

FishPlusOrange avatar Dec 03 '18 12:12 FishPlusOrange

子类应该也可以

jieyuanfei avatar Jan 08 '19 08:01 jieyuanfei

子类应该也可以

是的,举个 :chestnut::

class SubFunction extends Function {}

let bar = new SubFunction()

bar.toString = () => 'opening'

console.log('%s', bar) // opening

FishPlusOrange avatar Jan 09 '19 05:01 FishPlusOrange