2010-08-01 63 views
0

我使用FireFox作为我的主要浏览器,特别是在测试我的网站时,Avoru。但是,当检查我的代码在其他主流浏览器(Google Chrome,Opera和Safari)中是否正常工作时,我发现我的自定义JavaScript似乎都不起作用。尽管页面源代码中的函数和代码都很明确,但使用typeof为我的所有函数返回了“未定义”值。JavaScript如何在FireFox中完美工作,但在其他浏览器中完全不能工作?

这个问题的根源是什么?如果它有什么区别,我使用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); 
}); 
+2

给我们一些代码与... – 2010-08-01 06:13:25

回答

2

如果您的函数返回的typeof返回undefined,那么很有可能是JavaScript的一些分析时错误。这意味着firefox在你的代码中接受的宽容,其他浏览器不是。

我会做的是通过代码JSLint看看是否有任何错误。我在代码中看到了一些错误,但我不确定这是否是问题的原因。一旦JSLint错误得到解决,你的代码将直接工作,或者错误的原因将是显而易见的。

+0

谢谢!使用JSLint似乎修复了代码,现在它可以正常工作。 – drfranks3 2010-08-02 01:54:44

0

可能当您钻取jQuery库时,您会发现其类和方法有浏览器特定的实现。我注意到了它的AjaxManager。

相关问题