我可以在IE8-9中检测用户打开开发人员工具吗?

时间:2013-04-25 07:48:39

标签: javascript internet-explorer events

当用户打开开发人员工具时,我是否可以使用某种事件来检测?目前我用

围绕问题setInterval
var interval, consoleOpen = false;
interval = setInterval(function() {
    if(typeof console !== 'undefined' && typeof console.log !== 'undefined') {
        clearInterval(interval);
        consoleOpen = true;
        console.log("Console is open!");
        // dump debug message queue...
    }
}, 100);

但我想避免这样的解决方案,如果可以的话,那么我可以使用哪种更好的方法吗?原因是一旦控制台出现,就会保留调试消息和console.log()的积压。我已经将消息存储在一个数组中,该数组的行为类似于限制为100条消息的队列。

1 个答案:

答案 0 :(得分:2)

这在IE8中可能不起作用(definePropertysomewhat buggy),但我没有那个用来验证情况。但是,它在IE9 [1]中运行良好。

(欣赏这是一个不完全完整的解决方案,但它可能是一个有用的起点。)

(function() {
    if ('console' in window) return;
    if (!Object.defineProperty) return;

    Object.defineProperty(window, 'console', {
        configurable: true,
        enumerable: true,
        set: function (val) {
            delete this.console; // 'Unwatch' console changes
            this.console = val;

            // Notify your logging service that it can start
            // outputting to `console.log` here
            // Logger.start() or whatever's appropriate
        }
    });
})();

[1]警告:我实际上没有测试它,除了把它扔在IE上看看会发生什么。