IE6链接中的请求被异常中断及解决方案

在做一个ticket时,用到这样一段代码:

// html代码
// <a href="javascript:void(0)">订阅</a>

// js  代码
ndArea.delegate('click', handleSubscribe, '.subscribe a');
function handleSubscribe(e) {
    var ndTarget = e.target;

    // 未登录弹出登陆
    if (!isLogin) {
        Y.use('www-dialog', function(Y) {
            Y.mt.www.Dialog.login();
        });
    }
}

要实现的功能是在用户点击订阅链接时,如果未登陆则弹出登陆框让用户登陆 Y.mt.www.Dialog.login() ,这段代码在大部分浏览器中运行正常,包括Firefox,chrome,IE9, IE8,IE7,但是在IE6中报错

Y.mt.www.Dialog为空或不是对象

从错误信息看断定是Dialog没有拿到,用Fiddler跟踪发现在点击链接是发起了对 dilog.js(www-dialog模块) 的请求,同时返回值为200,应该是取到了对应的文件,但是为什么报错呢?

后来注意到这个dialog.js这个文件对应的请求前面有一个特殊的符号,查了下这个符号表示 请求被客户端、Fiddler或服务器中断 ,于是利用这个关键词查询发现是IE6的一个bug(不知道称之为癖好合适还是bug合适),表现为

链接的点击事件中的请求会被异常中止

解决方案是 阻止链接的默认动作 ,上面的代码改成以下即可

// 未登录弹出登陆
if (!isLogin) {
    Y.use('www-dialog', function(Y) {
        e.halt(); // 阻止链接的默认事件
        Y.mt.www.Dialog.login();
    });
}

参考文献

comments powered by Disqus