javascript如何能在FireFox中完美工作,而在其他浏览器中却完全不工作?

javascript如何能在FireFox中完美工作,而在其他浏览器中却完全不工作?,javascript,firefox,google-chrome,opera,Javascript,Firefox,Google Chrome,Opera,我使用FireFox作为我的主浏览器,尤其是在测试我的网站时。然而,当检查我的代码是否在其他主要浏览器(谷歌浏览器、Opera和Safari)中正常工作时,我发现我的定制javascript似乎都不起作用。虽然函数和代码在页面源代码中很清楚,但使用typeof为我的所有函数返回了一个“未定义”的值 这个问题的根源是什么?如果有什么不同,我会在代码中使用Prototype和jQuery库,并在页面底部加载所有javascript(出于速度原因)。谢谢 编辑:下面是一些代码 // === var $

我使用FireFox作为我的主浏览器,尤其是在测试我的网站时。然而,当检查我的代码是否在其他主要浏览器(谷歌浏览器、Opera和Safari)中正常工作时,我发现我的定制javascript似乎都不起作用。虽然函数和代码在页面源代码中很清楚,但使用typeof为我的所有函数返回了一个“未定义”的值

这个问题的根源是什么?如果有什么不同,我会在代码中使用Prototype和jQuery库,并在页面底部加载所有javascript(出于速度原因)。谢谢

编辑:下面是一些代码

// === var $j frees up the $ selector. === //
var $j = jQuery.noConflict();
// === Function: loading(); and loaded(); Manually controls the #loading element. === //
function loading(){
    $j('#load_ovrly').css({'display':'block'});
    $j('#loader').fadeTo('fast',1);
}
function loaded(){
    $j('#load_ovrly').css({'display':'none'});
    $j('#loader').fadeTo('fast',.0001);
}
// === Function: content(); Using everything after the #, the hash is processed and requested. === //
function content(theHash){
    var hashIndex = theHash.indexOf('-');
    var commaIndex = theHash.indexOf(',');
    // === Split the Hash accordingly. === //
    if((hashIndex > commaIndex) || (commaIndex == -1 && hashIndex == -1)) newHash = theHash.split(',');
    if((commaIndex > hashIndex) || (commaIndex == -1 && hashIndex != -1)) newHash = theHash.split('-');
    // === Set some extra variables for proofing. === //
    var url = newHash[0]+".php";
    // === Get parameters if there are any. === //
    if(newHash[1]){
        var Json = jsonify(newHash[1]);
        var pars = "p="+Json;
    }else{
        var pars = "p={\"forcepars\":\"true\"}";
    }   
    // === Finally request the page. === //
    request(url,pars);
}
// === Function: jsonify(); Turns the leftover hash from content(); into valid JSON. === //
function jsonify(str){
    var Json = "{";
    var split = str.split(",");
    for(var a = 0; a < split.length; a++){
        if(a > 0){Json = Json+",";}
        var b = split[a].split(":");
        if(b[1] != undefined) Json = Json+"\""+b[0]+"\":\""+b[1]+"\"";
    }
    return Json+"}";
}
// === Function: AJAX(); Sends an ajax request given the url, some parameters, and the onComplete. === //
function AJAX(url,parameters,complete){
    $j.ajax({
        type: 'POST',
        url: url,
        data: parameters,
        complete: function($data){
            var data = $data.responseText;
            complete(data);
        }
    });
}
// === Function: request(); Takes the properly formatted url and parameters and requests the page. === //
function request(url,parameters){
    AJAX(url,parameters,
        function(data){
            $j('#my_box').html(data);
        }   
    );      
}
// === Function: sendForm(); Sends the form and updates the page. === //
function sendForm(id,url){
    var form = $j("form#"+id).serialize();
    AJAX(url,form,function(data){$j("#my_box").html(data);});   
}
// === Below are items that are activated once the DOM is loaded. === //
var curHashVal = window.location.hash;
document.observe("dom:loaded",function(){   
    $j("#loader").ajaxStart(function(){
        loading();
    }).ajaxStop(function(){
        loaded();
    }); 
    if(window.location.hash.length > 1) content(curHashVal.substr(1));
    new PeriodicalExecuter(function() {
        if(curHashVal != window.location.hash){
            content(window.location.hash.substr(1));
            curHashVal = window.location.hash;
        }
    },.15);
}); 
//==var$j释放$选择器。==//
var$j=jQuery.noConflict();
//==函数:加载();并加载();手动控制#加载元素//
函数加载(){
$j('#load_ovrly').css({'display':'block'});
$j('loader').fadeTo('fast',1);
}
函数加载(){
$j('load_ovrly').css({'display':'none'});
$j('loader').fadeTo('fast',.0001);
}
//==函数:content();使用#之后的所有内容,处理并请求哈希//
函数内容(theHash){
var hashIndex=hash.indexOf('-');
var commaIndex=hash.indexOf(',');
//==相应地拆分哈希。===//
如果((hashIndex>commaIndex)|(commaIndex==-1&&hashIndex=-1))newHash=theHash.split(',');
如果((commaIndex>hashIndex)|(commaIndex==-1&&hashIndex!=-1))newHash=theHash.split('-');
//==为校对设置一些额外变量。==//
var url=newHash[0]+“.php”;
//==如果有参数,则获取参数。==//
if(newHash[1]){
var Json=jsonify(newHash[1]);
var pars=“p=”+Json;
}否则{
var pars=“p={\'forcepars\':\'true\'”;
}   
//==最后请求页面。===//
请求(url、PAR);
}
//==函数:jsonify();从content()转换剩余的哈希;转换为有效的JSON//
函数jsonify(str){
var Json=“{”;
var split=str.split(“,”);
对于(var a=0;a0){Json=Json+“,”;}
var b=split[a]。split(“:”);
如果(b[1]!=undefined)Json=Json+“\”“+b[0]+“\”:\”“+b[1]+“\”;
}
返回Json+“}”;
}
//==函数:AJAX();根据url、一些参数和onComplete发送ajax请求//
函数AJAX(url、参数、完成){
$j.ajax({
键入:“POST”,
url:url,
数据:参数,
完成:函数($data){
var data=$data.responseText;
完整(数据);
}
});
}
//==函数:request();获取格式正确的url和参数并请求页面。==//
函数请求(url、参数){
AJAX(url、参数、,
功能(数据){
$j(“#我的盒子”).html(数据);
}   
);      
}
//==函数:sendForm();发送表单并更新页面。==//
函数sendForm(id、url){
var form=$j(“form#“+id).serialize();
AJAX(url、表单、函数(数据){$j(“#my_box”).html(数据);});
}
//==下面是加载DOM后激活的项。==//
var curHashVal=window.location.hash;
观察(“dom:loaded”,function(){
$j(“#loader”).ajaxStart(函数(){
加载();
}).ajaxStop(函数(){
加载();
}); 
如果(window.location.hash.length>1)内容(curHashVal.substr(1));
新的周期性计数器(函数(){
if(curHashVal!=window.location.hash){
内容(window.location.hash.substr(1));
curHashVal=window.location.hash;
}
},.15);
}); 

当您深入研究jQuery库时,可能会发现它的类和方法有特定于浏览器的实现。我在AjaxManager中注意到了这一点。

如果函数的typeof返回undefined,则javascript可能存在一些解析时间错误。这意味着firefox对代码中的某些内容很宽容,其他浏览器则不然


我要做的是将代码传递给大家,看看是否有错误。我在您的代码中看到了几个错误,但我不确定这是否是问题的原因。一旦JSLint错误被修复,您的代码将直接工作,或者错误的原因将显而易见。

也许您犯了我在这里提到的错误:代码中的某个地方


无论如何,要真正回答这个问题,我们需要一个指向出现问题的完整页面的链接。

给我们一些代码来处理……谢谢!使用JSLint似乎修复了代码,现在它可以正常工作了。