2016-02-04 89 views
1

我在IE中看到一个奇怪的错误,我没有在Chrome中看到。具体来说,这涉及到一些JS代码在(Telerik)向导导航回第一步时不会触发。如何在IE中调试“Back Navigation Caching”?

当用户点击他们的“上一步”按钮,一些数据没有被正确加载。击中F12并调出开发者控制台向我显示以下警告:

DOM7011:此页面上的代码禁用后退和前进缓存。欲了解更多信息,请参见:http://go.microsoft.com/fwlink/?LinkID=291337

好了,我去中提供的链接,我发现的文件中指出:

In order to be cached, webpages must meet these conditions: 
... 
- The F12 Developer tools window isn't open 

这是一个问题,因为当我使用中的导航按钮我向导当开发者窗口打开时,它的行为正确,就像在Chrome中一样。

如何调试我相关的JavaScript,所以我可以弄清楚是怎么回事?此外,我了解缓存是什么,但我不确定这是什么,我不知道Chrome为什么会有不同的表现。有没有一种方法可以强制IE浏览器像Chrome一样运行,并切断(或关闭)导致此问题的任何功能?

回答

1

呸。回到旧学校为你调试。

短把整个浏览器到Windows调试器,你几乎可以忘记设置断点。你所能做的只是登录。

如果你很幸运并且问题不是很深,你可以使用一些简单的声明来让你知道代码中不同阶段的事情状态。一件好事就是你可以很好地序列化对象,例如,你可以做JSON.stringify(this),这可能会给你一个巨大的输出,你可以复制并粘贴到你的IDE并解压缩。这样做的一个主要优点是警报会阻止,所以你可以花时间研究输出。这种情况的一个主要缺点是竞争条件现在更有可能。

或者,你可以添加一个<textarea>到页面,把你的JSON.stringify(this)结果成。因为这意味着额外的DOM突变,它也增加了竞争条件的可能性,但不是太多。 (如果比赛条件的可能性,你可以这样做:

(function() { 
    var currentState = JSON.stringify(this); 
    setTimeout(function() { 
     document.querySelector('textarea').value = currentState; 
    }, 1000); 
})() 

即使这些都是现在异步的,如果你按顺序使用多次,这些都将在同一顺序执行(除非你改变超时时间)。

如果你正在做的实际浏览网页时(不只是改变与pushState()的URL),那么实际读取这些日志将是一个问题。解决的办法是把页面在一个框架和写的内容如果两个框架都在同一个域上运行,那么将数据推入兄弟框架就没有问题了,如果你不能把它们放在同一个域中,你就是一个scre星期三。

+0

警报+ JSON.stringify()帮助我得到我所需要的。谢谢。 – RLH