IE6 加载动态js不执行的问题
用户的信息存放在主站上,一个子站也提供用户登录的接口,登陆采用ajax不刷新页面的方式,由于安全原因,ajax不允许跨域执行,所以单纯的ajax是不能直接运行的。但是动态创建script的方式不存在跨域的问题,大致的操作是通过document.createElement创建一个script对象,同时script的src指向主站提供验证用户信息的url,url中参数包括用户输入的用户名和密码,把这个script对象添加到当前页面上。主站的接口根据用户名密码来验证用户是否合法,响应的内容是调用一个js方法。
该方式在IE6下有时不能正常工作,其他主流浏览器都没有问题。IE6的具体症状是第一次能正常工作,如果用户输入用户名和密码不匹配,第一次能提示用户重新输入,但是修改后重新提交了就没有反应,必须要强制刷新才会正常,通过httpwatcher查看,请求是发送,也有响应,就是没有调用成功页面上的js方法。经常反复折腾,终于找到问题的根源,主站接口url是php,所以响应的header中content-type不是text/html,强制设置header中content-type设置为 Content-Type: text/javascript 或者Content-Type: application/x-javascript后,IE6就正常工作了。另外如果服务器启用gzip压缩,可能也会造成IE6不能正常工作,在apache中可以针对某个特定的uri设置成不压缩,如:SetEnvIfNoCase Request_URI /user/vlogin/.* no-gzip dont-vary。