Safari PC / Mac中的jQuery / JavaScript问题

时间:2010-01-29 01:01:25

标签: javascript jquery safari

我现在差不多完成了一份合同,而且在最后一分钟我的大部分javascript / jQuery都无法在PC或Mac上运行。

整个网站的设计采用渐进式增强和不引人注目的javascript转换为?#hash链接,淡入淡出页面以及平滑翻转 - 所有这些都已停止仅适用于Safari。

我已经读过Safari可能无法处理大型.js文件,但我的jquery页面不到10k,我使用压缩的jquery库大约55k。

以下是我现在所使用的,适用于IE,FF和Chrome的最新版本 - test.cultureconquest.com

2 个答案:

答案 0 :(得分: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";
}

我还注意到你正在使用jQuery的livequery()扩展名。在jQuery 1.3中添加了等效方法live()。有关详细信息,请参阅live()

这些是要注意的几件事。如果你可以让你的代码通过jslint测试,我打赌你会在很多方面让它在Safari中运行。

答案 1 :(得分:0)

我看到的主要问题是,由于在两个class .MAIL语句中使用了变量名.livequery,因此抛出了Parse错误。只需更改该变量名称(在这两个函数中出现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;
});