Javascript仅在Internet Explorer上运行一次,在开发人员工具打开时正常运行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript仅在Internet Explorer上运行一次,在开发人员工具打开时正常运行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3106字,纯文字阅读大概需要5分钟。
内容图文
![Javascript仅在Internet Explorer上运行一次,在开发人员工具打开时正常运行](/upload/InfoBanner/zyjiaocheng/818/5eaa85e4e142474695d52edc1f22c97d.jpg)
我们在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 () { };
我尝试包括它:
>我们的.js文件中的某处
>加载所有.js文件和所有外部库后,脚本元素在头部
>在加载所有.js文件和所有外部库之前,脚本元素在头部
> $(document).ready(function(){}); ,在加载所有其他js后的头部脚本元素中
到目前为止,我在这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,所以我忽略了它作为问题的可能原因.
解决方法:
(我提出了评论,但现在将它作为一个答案,因为它似乎已经解决了问题)获取请求被IE缓存但是当开发者控制台打开时它不执行此缓存.
三种修复方法:
>在请求中添加时间戳,以欺骗浏览器,使其认为每次都在发出新请求
var requestUrl = '/Tools.ashx?command=validscreen&time='+new Date().getTime();
>将响应标头设置为no-cache
>发出POST请求,因为这些请求没有被缓存
(正如@juanmendes所指出的那样,你不是在编辑资源)
内容总结
以上是互联网集市为您收集整理的Javascript仅在Internet Explorer上运行一次,在开发人员工具打开时正常运行全部内容,希望文章能够帮你解决Javascript仅在Internet Explorer上运行一次,在开发人员工具打开时正常运行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。