Подтвердить что ты не робот

SYNTAX_ERR: исключение DOM 12 - Hmmm

Я работал над небольшим слайд-шоу/публичным дисплеем для клиента, который использует HTML5 Rock код слайд-шоу. Я столкнулся с DOM Exception 12 - синтаксической ошибкой, которая предположительно связана с селекторами CSS - при этом обезьяна с ним... но я не могу отследить ее до изменений, которые я сделал в коде. Я думаю, что это может быть что-то, что было обнаружено, когда я добавил функции.

Я проследил его до этого объекта (live version здесь):

var SlideShow = function(slides) {
    this._slides = (slides || []).map(function(el, idx) {
      return new Slide(el, idx);
    });
    var h = window.location.hash;
    try {
      this.current = h;
    } catch (e) { /* squeltch */ }
    this.current = (!this.current) ? "landing-slide" : this.current.replace('#', '');
    if (!query('#' + this.current)) {
      // if this happens is very likely that someone is coming from
      // a link with the old permalink format, i.e. #slide24
      alert('The format of the permalinks have recently changed. If you are coming ' +
             'here from an old external link it\ very likely you will land to the wrong slide');
      this.current = "landing-slide";
    }
    var _t = this;
    doc.addEventListener('keydown',
        function(e) { _t.handleKeys(e); }, false);
    doc.addEventListener('touchstart',
        function(e) { _t.handleTouchStart(e); }, false);
    doc.addEventListener('touchend',
        function(e) { _t.handleTouchEnd(e); }, false);
    window.addEventListener('popstate',
        function(e) { if (e.state) { _t.go(e.state, true); } }, false);
};

Активация SlideShow() (строка 521 в main.js):

var slideshow = new SlideShow(queryAll('.slide'));

Вызов queryAll('.slide') возвращает массив всех слайдов с классом .slide. Однако при передаче queryAll('.slide') в качестве параметра для экземпляра SlideShow() он возвращает ошибку DOM Exception 12.

Кто-нибудь видел это раньше?

4b9b3361

Ответ 1

В документе используются незаконные id-атрибуты (незаконные до HTML5), например. 2-slide. Исправьте их.

Чтобы объяснить: для решения известного неправильного поведения element.querySelectorAll() селектор .slide будет внутренне переписан (с использованием идентификатора элемент). Это приведет к чему-то вроде этого:

#2-slide .moreselectors

... и заставляет ошибку, поскольку идентификатор может не начинаться с номера.

Смотрите скрипту: http://jsfiddle.net/doktormolle/FGWhk/

Ответ 2

Если вы придете сюда после поиска этой ошибки в слайдах горных пород HTML5:

По какой-то причине они удаляют класс 'to-build' со следующим:

toBuild[0].classList.remove('to-build', '');

Это ломает все слайды на сборке, даже демонстрация Google сейчас сломана.

Просто измените строку 220 на default.js на

toBuild[0].classList.remove('to-build');

все хорошо!

Ответ 3

В моем случае он использовал self.postMessage(e.data); в основной теме при использовании веб-работников.

Я знаю, что это не связано с проблемой OP, но это странная ошибка, поэтому я оставляю это здесь, надеюсь, что она помогает другим.

Ответ 4

Такая же проблема для меня, но в моем случае попытайтесь получить элементы из их атрибута

document.querySelectorAll('input[name="path"]')

и SYNTAX_ERR: исключение DOM 12 произошло только в Safari. Поэтому я изменил его, чтобы получить элемент непосредственно из класса и теперь отлично работает.

Ответ 5

Вы можете избежать кавычек, например, в applescript, а затем нет проблем на сафари

do JavaScript "document.querySelector('span[" & attrName & "=\"" & attrValue & "\"]').click();"