在激活开发人员工具之前,使用JS的网站在IE9中不起作用

Tom*_*ger 59 javascript internet-explorer-9

我正在开发一个复杂的网站,它充分利用了jQuery和许多脚本.在加载网站时,我的脚本都没有工作(虽然我可以确认其他脚本运行正常).除了一件事,我不会在SE上发布这样一个蹩脚的问题:

我点击F12打开开发人员工具,以便我可以调试我的问题,一切都立即完美!

更糟糕的是,如果我关闭浏览器,启动它,首先打开Dev Tools并访问该站点,一切都按预期工作.

所以我甚至无法调试这个问题因为Dev Tools修复了它!Dev Tools可以做些什么让事情发挥作用?它是否改变了UA(我做了一些jQuery.browser检测)?它对doctype有用吗?

编辑

我的所有控制台日志记录都包含在以下包装器实用程序函数中:

   function log(msg){
    if (console){
        console.log(msg);
    }
   }
Run Code Online (Sandbox Code Playgroud)

我可以尝试的任何想法或建议都会受到欢迎.如果我找到解决方案,我会在这里发布.

Lia*_*rch 34

我很欣赏我在这里参加派对的时间已经很晚了,但我有一个IE9的解决方案,它有点不同.

(function() {
    var temp_log = [];
    function log() {
        if (console && console.log) {
            for (var i = 0; i < temp_log.length; i++) {
                console.log.call(window, temp_log[i]);
            }
            console.log.call(window, arguments);
        } else {
            temp_log.push(arguments);
        }
    }
})();
Run Code Online (Sandbox Code Playgroud)

基本上不是console.log你用log.如果console.log存在,那么它正常工作,否则它将日志条目存储在一个数组中,并在下一个可用的log地方输出它们console.

如果它在console可用时立即推送数据会很好,但这比设置自定义setInterval侦听器要便宜.

更新功能(2012年10月1日)

我已经更新了这个脚本供我自己使用,并且认为我会分享它.它有一些值得改进:

  • 使用console.log()正常,即不再需要使用非标准log()
  • 支持多个参数,例如 console.log('foo', 'bar')
  • 你也可以使用console.error,console.warnconsole.info(尽管输出它们console.log)
  • 脚本console每1000ms 检查一次本机,并在找到时输出缓冲区

我认为通过这些改进,这已成为IE9的一个非常可靠的垫片.在这里查看GitHub回购.

if (!window.console) (function() {

    var __console, Console;

    Console = function() {
        var check = setInterval(function() {
            var f;
            if (window.console && console.log && !console.__buffer) {
                clearInterval(check);
                f = (Function.prototype.bind) ? Function.prototype.bind.call(console.log, console) : console.log;
                for (var i = 0; i < __console.__buffer.length; i++) f.apply(console, __console.__buffer[i]);
            }
        }, 1000); 

        function log() {
            this.__buffer.push(arguments);
        }

        this.log = log;
        this.error = log;
        this.warn = log;
        this.info = log;
        this.__buffer = [];
    };

    __console = window.console = new Console();
})();
Run Code Online (Sandbox Code Playgroud)


cra*_*der 13

你有控制台调用,如果开发工具没有打开,这些将失败.一个简单的解决方法是在以下函数中包装任何控制台调用:

function log(msg) {
  if(console)
    console.log(msg);
}
Run Code Online (Sandbox Code Playgroud)