IE 8 ошибка jquery при использовании jquery + rails ujs driver + google maps v3. обходной путь? - PullRequest
2 голосов
/ 07 марта 2011

протестировано с jquery 1.4.4 и 1.5.1, подтверждена проблема с обоими

при использовании драйвера jquery + rails ujs (из github) + google maps v3, нажатие на маркер карты вызывает ошибку IE "Fail". при использовании полного jquery v 1.5.1, размещенного на CDN, отладчик IE указывает на строку 2838 (обратите внимание, что проблема также возникает с jquery.min.js или версией 1.4.4).

подтвердил, что именно драйвер ujs ​​вызывает эту ошибку. при удалении драйвера нажатие маркеров не приводит к ошибке.

простой живой пример доступен здесь: http://avioing.com/maps/marker-simple.html. эта страница является точной копией страницы примера Google http://code.google.com/apis/maps/documentation/javascript/examples/marker-simple.html. я добавил только вызовы скриптов для загрузки jquery и самый последний драйвер ujs. Вы должны быть в состоянии воспроизвести ошибку, нажав на маркер карты.

образец страницы отлично работает в FF и Chrome, и ошибка возникает только в IE

см. Также http://avioing.com/maps/marker-simple_no_ujs.html и http://avioing.com/maps/marker-simple_no_marker.html, ни один из которых не имеет этой проблемы.

кто-нибудь знает об обходном пути?

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

@ Марк указал мне правильное направление, и я нашел решение.

Это известная проблема, о которой сообщалось здесь http://bugs.jquery.com/ticket/7071,, и есть решение, принятое людьми из команды jquery.В ветке исправления ошибок jquery 1.4.4 есть патч (см. Обсуждение здесь https://github.com/jquery/jquery/pull/13), но он еще не был добавлен ни в обновление 1.4.4, ни в обновление 1.5.1.

Из того, что я вижу, в jquery есть 4 экземпляра "var elem = e.target, type = elem.type" (src / events.js), которые необходимо заменить.Вы можете "git clone" ветку и создать пропатченный jquery самостоятельно, или пропатчить свою копию, или загрузить одну из двух, которые я уже пропатчил (абсолютно никаких гарантий, yada, yada…): https://gist.github.com/861689. Пока что,оба, кажется, решают конкретную проблему, которую я описал в своем вопросе.

2 голосов
/ 07 марта 2011

Эта проблема напоминает мне о похожей проблеме с IE и VML, как отмечалось здесь: http://bugs.jquery.com/ticket/7071 где, когда IE встречает элемент и вы пытаетесь получить доступ к атрибуту этого элемента (elem.type в коде jQuery ), это не удается, и дальнейшие попытки доступа к этому элементу не увенчались успехом.

РЕДАКТИРОВАТЬ: РАБОТАЙТЕ ВОПРОС ДЛЯ ВАШЕГО ВЫПУСКА:

Приведенная вами строка: 2838 в jquery 1.5.1

var elem = e.target,
    type = elem.type;

вам нужно перехватить ошибку примерно так: (взломать источник jquery)

    var testType = 'unknown';
    try { testType = elem.type; } catch (e) { /* kill IE exceptions on unknown type nodes */ }
    if (testType !== 'unknown') { 
    var elem = e.target,
        type = elem.type;
};

ВНИМАНИЕ: Вы можете столкнуться с большим количеством мест с подобными проблемами, так что тестируйте хорошо.

Просто чтобы прояснить, что это НЕ самый эффективный / лучший способ сделать это, но действительно делает очевидным, что вы / я делаем, чтобы обойти это.

...