Ошибка недопустимого аргумента при вызове функции, в частности, с IE и FF

#javascript #internet-explorer #firefox

#javascript #internet-explorer #firefox

Вопрос:

Я использую этот небольшой javascript «toolbox» от http://www.hunlock.com/blogs/Totally_Pwn_CSS_with_Javascript

Пока мой код работает в Firefox и Chrome, но не в IE.

* РЕДАКТИРОВАТЬ* В Firefox тоже нет..

Я получаю ошибку недопустимого аргумента прямо там, где он вызывает функцию getCSSRule ‘toolbox’. http://d.pr/Ai5D и из DevTools http://d.pr/btFU

Вот код, о котором идет речь:

 function myModal() {
  if (window.location.href.indexOf("#fr") != -1) {
    getCSSRule("#MB_content").style.backgroundImage = "url('/mailer/img/bgimg-fr.jpg') !important";
    Modalbox.show('mailer/myModal-fr.html', {title: 'Nouveau', width: 1000}); return false;
  } else {
    Modalbox.show('mailer/myModal-en.html', {title: 'Sign-Up', width: 1000}); return false;
  }
}

function thankYou() {
  getCSSRule("#MB_content").style.backgroundImage = "none !important";
  getCSSRule("#modalWrap").style.minHeight = "0 !important";
}
  

Вы можете посмотреть любые другие файлы здесь https://github.com/jwmann/Modal-Sign-up/tree/master/mailer

Ответ №1:

В документах для getCSSRule говорится, что он возвращает объект style. Вы ожидаете, что он вернет объект DOM.

Итак:

 getCSSRule("#MB_content").style.backgroundImage = "url('/mailer/img/bgimg-fr.jpg') !important";
  

должно быть

 getCSSRule("#MB_content").backgroundImage = "url('/mailer/img/bgimg-fr.jpg') !important";
  

Однако в документах также приводятся примеры использования, когда он возвращает объект DOM. Сбивает с толку!

Часть 2. Проведя немного больше тестирования, я обнаружил, что:

  • если в документе нет тега стиля или внешней таблицы стилей, происходит сбой
  • если в вашем объекте #MB_content не определены правила CSS, и вы используете getCSSRule, это приводит к вашей ошибке. В этом случае используйте addCSSRule.

Комментарии:

1. Вы правы. Я изменил это. Хотя, я все еще получаю тот же результат в IE. Происходит что-то странное. d.pr/btFU

2. На самом деле, это остановило его работу. Я думаю, что необходим ‘.style’

3. Кроме того, это также не работает в Firefox. Я думал, что у меня это тоже работает .. черт.