Internet Explorer 11后退按钮Javascript行为
在Chrome、FF和IE8-10中,当我按下后退按钮时,会调用javascript$(document).ready()函数,但在IE11中,不会调用任何javascript。有人知道如何让IE11像所有其他浏览器一样响应并使我的代码保持一致吗Internet Explorer 11后退按钮Javascript行为,javascript,jquery,internet-explorer,internet-explorer-11,Javascript,Jquery,Internet Explorer,Internet Explorer 11,在Chrome、FF和IE8-10中,当我按下后退按钮时,会调用javascript$(document).ready()函数,但在IE11中,不会调用任何javascript。有人知道如何让IE11像所有其他浏览器一样响应并使我的代码保持一致吗 <script type="text/javascript"> alert("Are we called?"); // neither is this called in IE11 $( document ).re
<script type="text/javascript">
alert("Are we called?"); // neither is this called in IE11
$( document ).ready( function() {
alert("document ready"); // does not get fired after hitting back on IE11
});
</script>
好的,在过去的两个小时里,我一直在努力解决这个问题,下面是我的发现 在后退和前进之间从不调用以下事件:
<!-- IE11 back/forward hack - http://stackoverflow.com/questions/21274085/internet-explorer-11-back-button-javascript-behavior -->
<script type="text/javascript">
var dumbIEHistory=history.length;
function busyWaitCheckForHistoryChange() {
if (history.length != dumbIEHistory) {
alert("History has changed, back/forward has been pressed, run my function!");
myFunction();
dumbIEHistory=history.length;
}
}
// using http://www.pinlady.net/PluginDetect/Browsers/ to do browser detection
$( window ).load(function() {
if (browser.isIE && browser.verIE >= 11) {
// let's not bog down all the other browsers because of IE11 stupidity
window.setInterval("busyWaitCheckForHistoryChange()", 1000);
} else {
// in other browsers, this will be called when back/forward is pressed
myFunction();
}
});
</script>
var dumbIEHistory=history.length;
函数busyWaitCheckForHistoryChange(){
if(history.length!=dumbIEHistory){
警报(“历史记录已更改,按了后退/前进,运行我的功能!”);
myFunction();
dumbIEHistory=history.length;
}
}
//使用http://www.pinlady.net/PluginDetect/Browsers/ 进行浏览器检测
$(窗口)。加载(函数(){
如果(browser.isIE&&browser.verIE>=11){
//让我们不要因为IE11的愚蠢而让所有其他浏览器陷入困境
setInterval(“busyWaitCheckForHistoryChange()”,1000);
}否则{
//在其他浏览器中,按下“后退/前进”时将调用此选项
myFunction();
}
});
当按下后退/前进按钮时,我所做的就是捕捉,因为在我们回击后,历史长度将为+1。如果用户来回导航过快,则在调用函数之前可能会有一瞬间,如果这是一个问题,则可以缩短间隔。希望这对其他人有所帮助。您可以使用window.onhashchange监视后退/前进按钮的行为
var isInited = false;
function init() {
if (isInited) {
return;
}
isInited = true;
...
}
$(document).ready(init);
window.onhashchange = function() {
$(document).ready(init);
};
我对这个问题也同样感到恼火。为什么IE如此不同 我发现在HTML文件中设置
缓存控制:no Cache
没有帮助。帮助的是在响应标题中实际设置它
在我的例子中,我正在绘制一个谷歌图表,每当我访问页面时,我都需要它来重新绘制(当我手动刷新页面时,IE11甚至阻止了我的图表重新绘制!)
我正在使用ASP.NETMVC,我的操作方法中的这段代码解决了这个问题
Response.CacheControl = "no-cache";
希望这能有所帮助。它被称为BF缓存,自FF 1.5以来一直存在 绑定到
pageshow
事件和事件。持久化的将告诉您它是否从缓存中提供
我也遇到了这个问题,如果你阅读IE文档,这显然不是一个bug。正如罗伯特·戴利(Robert Daly)所写,看看
您可以在此文档中找到beforeunload
事件阻止BF缓存。下面是一段简短的代码,它定义了在控制台上写入此事件以防止BF缓存:
if (typeof window.onbeforeunload != 'undefined'){
function doNothing(){
console.log('Prevent BF Cache');
}
window.onbeforeunload = doNothing;
}
onhashchange仅监视url之后的更改,例如。如果完全更改页面,则不会触发onhashchange。因此,onhashchange检测到,但当被回击并转到例如时,它不会被激发。请尝试此操作,当您在站点A上,然后转到站点B时,它可能会修复该问题,在返回站点A后,再转到站点B,历史长度不会更改,因此您的脚本在此类场景中是无用的。IE不执行任何脚本,只是默默地加载DOM的最新状态。好的一点是,我的场景并不真正关心导航离开,只是返回。谢谢你的赏金,我也想得到一个更好更满意的答案!这不仅仅是烦人的,而且只是IE失败的另一个新原因。我无法在Win7下的IE11.0.9600.17105上重现这个问题。当返回到页面时,准备好处理程序fired@A.Wolff-确保在测试此问题时关闭了开发人员工具控制台!如果它是打开的,一切都像其他浏览器一样工作。若控制台关闭了,那个么缓存问题就会比比皆是。我不知道为什么罗伯特·戴利的回答被否决了两次。它包含了一些有用的信息,说明了IE11在按下后退键时的行为方式。从msdn文档(又名第二个链接)中,我们读到:“为了缓存网页,网页必须满足以下条件:[……]F12开发者工具窗口未打开”附录:一个稍微有趣的消息是,如果在客户端注册表中将TabProcGrowth设置为0,则会出现IE11(基于我的测试)不再使用有问题的机制缓存页面。如果这确实成立,那么这是未记录的行为(AFAIK),所以如果我错了,请随时纠正我。第一个链接没有帮助,我从来没有注意到有第二个链接,因为格式。。看起来非常有希望。。。不幸的是,我不再从事需要这项工作的项目
if (typeof window.onbeforeunload != 'undefined'){
function doNothing(){
console.log('Prevent BF Cache');
}
window.onbeforeunload = doNothing;
}