我们在IE 11上运行javascript时遇到了一个不寻常的问题。我在我们运行IE8的服务器上尝试过它,同样的问题就出现了。但是,它在Chrome和Mozilla上运行良好。 这是有问题的代码:
SetGuideFatningCookie(fid); //set a cookie according to user choice
var validFatningCombo = ValidFatningCheck(); //ask server if user choice is valid using XMLHttpRequest GET request
if(validFatningCombo)
window.location.href = GetGuideTilbehoerURL(); //if valid redirect user to next page
else
popAutoSizeFancy("#GLfancy"); //if not show a fancybox with error text
用户选择7种选择中的一种。然后他们单击一个运行上述代码的按钮。代码设置包含用户选择的cookie,并询问服务器选择是否有效。如果有效 - 我们重定向用户,如果没有,我们打开一个包含一些错误文本和两个按钮的fancybox - “再试一次”(关闭框,他们可以再试一次)和“向我们发送消息”(将用户重定向到我们的“问我们一个问题“页面”。
代码在用户第一次进入此过程时运行正常。 但是,如果他们选择了无效选项,他们会关闭fancybox并尝试选择其他选项并继续 - >无论用户选择什么,总是会出现花式框。 如果他们选择了有效选项并继续,请重定向到下一页,然后返回此页面并选择无效选项并按继续 - >然后他们可以继续到下一页,而不会出现fancybox。
但是,如果打开IE的开发人员工具,则代码每次运行都是正确的。 我发现许多线程描述这是console.log的问题。我从所有.js文件中删除了对console.log的每个引用。它可能是我们正在使用的外部库之一,如jquery,modernizr,fancybox和menucool的工具提示库。
因此我尝试为IE包含一个控制台回退函数,就像这个帖子暗示的那样: Why does JavaScript only work after opening developer tools in IE once?
我目前正在尝试使用这个,我已经尝试了从我链接到的每一个其他后备控制台替换。
if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };
我试过把它包括在内:
到目前为止,我在这4个位置中的任何一个尝试过的后备代码都没有解决问题。它在IE中的行为总是一样的。到目前为止,我找不到另一个解决方案而不是“控制台”解决这个问题,所以如果有人对它有任何见解,我将不胜感激。
编辑:我将包含更多信息: 打开开发人员工具的行为消除了不需要的行为。控制台中没有显示任何错误。 我检查了服务器端,看看服务器是否从ValidFatningCheck()获得调用;事实证明,调用是第一次(或者如果开发人员工具是开放的 - 每次都进行)这是相当神秘的,因为重定向/ fancybox行在服务器调用之后出现并且它不会无法运行,即使它错了。
function ValidFatningCheck(){
var requestUrl = '/Tools.ashx?command=validscreen';
var req = new XMLHttpRequest();
req.open('GET', requestUrl, false);
req.send(null);
var res = "";
if (req.readyState==4)
res = req.responseText;
if(res == "true")
return true;
return false;
}
更新:通过在我的XMLHttpRequest中添加时间戳作为多个回复建议来解决问题。我没有意识到XMLHttpRequest使用AJAX,所以我忽略了它作为问题的可能原因。
答案 0 :(得分:6)
(我发表了评论,但现在会解决这个问题,因为它似乎已经解决了问题)获取请求被IE缓存但是当开发者控制台打开时它不会执行此缓存。
三种修复方法:
为请求添加时间戳,以诱使浏览器认为每次都在发出新请求
var requestUrl = '/Tools.ashx?command=validscreen&time='+new Date().getTime();
将响应标头设置为no-cache