一个插件引起的血案

chrome的插件 html Validator 会自动重新请求一边你访问的页面,从而导致 服务器的session由于这次请求而改变。导致代码执行错误。 找到问题的途径: 观察现象:

  1. 在本机有问题,但是在其他开发人员的机器没有问题。 (确认代码没有问题)
  2. 在本级有问题,上传到服务器,本机浏览器测试没有问题
  3. 正常浏览有问题,但是右击显示代码,之后刷新,就不会出现问题。 解决问题: 第二个现象是导致解决不够迅速的根本:(这个还没搞明白为什么) 如果是浏览器问题,应该上传到服务器也有问题出现的,但是服务器没问题,所以判断为本机Web服务器配置问题。 多方查找本地配置,还找不到问题,而且个人感觉不是问题的原因 随想到可能是ajax多次请求的问题,将代码简化为无ajax,问题依旧

最终找到问题的原因是现象3: 所以很疑惑,就右击页面->审核元素,发现chrome的插件,追加了不少html代码,遂一个一个的禁用插件,最终确认是html Validator引起的原因,然后就查看html Validator附加的js代码。发现确实会有一个xmlHTTPrequest请求,重新获取了一遍页面。。

var xhr = new XMLHttpRequest();

// If the result is finished, send complete page HTML code to W3C validator
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {

var htmlForm = document.createElement("form"),
htmlInput = document.createElement("input");

htmlForm.action = "http://validator.w3.org/check";
htmlForm.method = "post";
htmlForm.enctype = "multipart/form-data";

htmlInput.type = "text";
htmlInput.name = "fragment";
htmlInput.value = xhr.responseText;

htmlForm.appendChild(htmlInput);

document.body.appendChild(htmlForm);
htmlForm.submit();
htmlForm.parentNode.removeChild(htmlForm);
}
};

// Send XHR request to itself to get the entire HTML code
xhr.open("GET", location.href, true);

最终的疑惑:为什么同一个浏览器访问本地和服务器,服务器就没有问题(本地是host域名,服务器是真实域名),怎么想都不应该的。

经验: 浏览器的插件有可能导致程序的异常。尤其是个页面追加js的插件。