2010-01-29 64 views
1

我现在几乎完成了一份合同,并且在最后一分钟似乎我的javascript/jQuery中的大部分都没有在Safari或PC或Mac上工作。Safari中的jQuery/JavaScript问题PC/Mac

整个网站被设计为渐进式增强和不显眼的JavaScript转向?p =链接到#哈希链接,淡入淡出页面和平滑过渡 - 所有这些都停止工作只有Safari。

我读过Safari浏览器可能无法处理大的.js文件,但我的jquery页面在10k以下,我在大约55k处使用压缩的jquery库。

这是我现在有,在IE,FF和Chrome最新版本的作品 - test.cultureconquest.com

回答

4

许多错误暴露,当我运行代码的主体的jslint。很多小东西,比如缺少分号。其他的东西,比如命名变量“class”,这是JavaScript中的一个保留字,可能会成为一个问题。

你有一些逻辑可以使用真正的jQuery习语更好地处理。例如,你做的事:

var class = $(this).attr("class"); 
class = class.substr(5); 

var ext 
if (class == "ccm") { 
    ext = "cultureconquest.com"; 
} 
if (class == "gmail") { 
    ext = "gmail.com"; 
} 

jQuery有测试一个元素是否包含一个类中的方法,hasClass()

var ext; 
if ($(this).hasClass("ccm")) { 
    ext = "cultureconquest.com"; 
} 
if ($(this).hasClass("gmail")) { 
    ext = "gmail.com"; 
} 

我也注意到你正在使用livequery()扩展到jQuery的。在jQuery 1.3中添加了等效方法live()。详情请参阅live()

这些是要看的几件事情。如果你可以让你的代码通过一个jslint测试,我敢打赌你会在很多方面让它在Safari中工作。

+0

+1很棒的一点,也是一个很好的例子。 – 2010-01-29 01:39:48

+0

这个修好了,谢谢! 另外,我不认为live()涵盖了所有的函数,比如在DOM准备好之后加载的锚。 – abysslogic 2010-01-29 01:50:29

0

我看到的主要问题是,由于在两个.MAIL.livequery语句中使用变量名称class,所以抛出了分析错误。只需更改变量名称(在这两个函数中出现10次),如下所示:

// SAFE EMAIL // 
$(".MAIL").livequery(function() { 
    var email = $(this).attr("id"); 
    var className = $(this).attr("class"); 
    className = className.substr(5); 

    var ext 
    if (className == "ccm") { 
     ext = "cultureconquest.com"; 
    } 
    if (className == "gmail") { 
     ext = "gmail.com"; 
    } 

    document.getElementById(email).innerHTML = email+"@"+ext; 
    $(this).attr("title",""); 
}); 

$(".MAIL").livequery("click", function() { 
    var className = $(this).attr("class"); 
    className = className.substr(5); 

    var ext 
    if (className == "ccm") { 
     ext = "cultureconquest.com"; 
    } 
    if (className == "gmail") { 
     ext = "gmail.com"; 
    } 
    var email = $(this).attr("id")+"@"+ext; 
    var mailto = "mailto:"+email; 
    window.location = mailto; 
});