Проблемы с jQuery / JavaScript в Safari PC / Mac - PullRequest
1 голос
/ 29 января 2010

Я почти закончил контракт прямо сейчас, и в последний момент кажется, что большая часть моего javascript / jQuery не работает в Safari ни на ПК, ни на Mac.

Весь сайт спроектирован с прогрессивным улучшением и ненавязчивым javascript для превращения ссылок? P = в # ссылки хешей, постепенного исчезновения страниц и их плавного переключения - все это перестало работать только для Safari.

Я прочитал, что Safari может быть не в состоянии обрабатывать большие файлы .js, но моя страница jquery меньше 10 КБ, и я использую сжатую библиотеку jquery размером около 55 КБ.

Вот что у меня сейчас, работает в последних версиях IE, FF и Chrome - test.cultureconquest.com

Ответы [ 2 ]

4 голосов
/ 29 января 2010

Многие ошибки появляются, когда я запускаю 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. Эквивалентный метод live() был добавлен в jQuery 1.3. Подробнее см. live().

Это несколько вещей, на которые стоит посмотреть. Если вы сможете заставить свой код пройти тест jslint, держу пари, вы во многом добьетесь того, чтобы он работал в Safari.

0 голосов
/ 29 января 2010

Основная проблема, которую я вижу, заключается в том, что вы генерируете ошибку Parse из-за использования имени переменной class в ваших двух операторах .MAIL .livequery. Просто измените это имя переменной (оно появляется в этих двух функциях 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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...