2010-01-29 58 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; 
});