js 用firefox的firebug报错误 "s is null" 错误行:if(s.indexOf('ajaxerror) != -1) {这是一个类似AJAX收藏的一段代码,在IE中点击收藏可以正常加载,但是在firefox中就是不行,会报错,就是:"s is null"
应该是firefox不支持这个语句:
var s = $('ajaxframe').contentWindow.document.documentElement.firstChild.nodeValue;
不知道怎么改才可以让firefox支持,下面是代码,请高人指点一下,在百度里找了N久都找不到解决方法,谢谢了.function ajaxpost_load() {var formid = ajaxpostHandle[0];
var func = ajaxpostHandle[1];
var timeout = ajaxpostHandle[2];var formstatus = '__' + formid;showloading('none');if(is_ie) {
var s = $('ajaxframe').contentWindow.document.XMLDocument.text;
} else {
var s = $('ajaxframe').contentWindow.document.documentElement.firstChild.nodeValue;
}
evaled = false;
if(s.indexOf('ajaxerror') != -1) {
evalscript(s);
evaled = true;
}
if(s.indexOf('ajaxok') != -1) {
ajaxpostresult = 1;
} else {
ajaxpostresult = 0;
}
//function
if(func) {
setTimeout(func + '(\'' + formid + '\',' + ajaxpostresult + ')', 10);
}if(!evaled && $(formstatus)) {
$(formstatus).style.display = '';
ajaxinnerhtml($(formstatus), s);
evalscript(s);
}formid.target = 'ajaxframe';
ajaxpostHandle = 0;
}

解决方案 »

  1.   

    firstChild.nodeValue这种写法是 不安全的,firstChild代表的是空格或者换行符,ie和非IE处理是不同的,不但是Fireofx
    你可以改成
    var s = $('ajaxframe').contentWindow.document.documentElement.children[0].nodeValue;
      

  2.   

    我改成
    var s = $('ajaxframe').contentWindow.document.documentElement.children[0].nodeValue;
    还是不行,还是报s is null,有没其它用法?
      

  3.   

    如果不行,你需要去找nextSibling,找到找到nodeType=1的元素。
    原理讲解参见
    http://dotnet.aspx.cc/file/firstElementChild-lastElementChild-previousElementSibling-nextElementSibling-childElementCount.aspx另外,你先调试出
    $('ajaxframe')
    $('ajaxframe').contentWindow
    $('ajaxframe').contentWindow.document
    $('ajaxframe').contentWindow.document.documentElement这些对象是否都存在
      

  4.   

    function myfirstChild(n){
    var y = n.firstChild;
      while (y.nodeType!=1) {
        y = y.nextSibling;
      }
    return y;
    }
    -------------
    if(is_ie) {
    var s = $('ajaxframe').contentWindow.document.XMLDocument.text;
    } else {
    var s = myfirstChild($('ajaxframe').contentWindow.document.documentElement).nodeValue;
    }
    试试这个!
      

  5.   

    try {
    s = $('ajaxframe').contentWindow.document.XMLDocument.text;

    } catch(e) {
    try {
    s = $('ajaxframe').contentWindow.document.documentElement.firstChild.wholeText;

    } catch(e) {
    try {
    s = $('ajaxframe').contentWindow.document.documentElement.firstChild.nodeValue;

    } catch(e) {
    s = '内部错误,无法显示此内容';//如果出现这个请检查域名是否相同 
    }
    }
    }