Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Динамическая смена стилей после переноса на хостинг (https://javascript.ru/forum/misc/36573-dinamicheskaya-smena-stilejj-posle-perenosa-na-khosting.html)

yakto 20.03.2013 10:31

Динамическая смена стилей после переноса на хостинг
 
День добрый уважаемым форумчанам!
Проблемка возникла после переноса сайта с локального хоста на web - перестал работать скрипт динамической смены стилей по клику.
В панели хрома наблюдаю ошибку: "Uncaught SyntaxError: Unexpected identifier ".
Сам скрипт:
function setActiveStyleSheet(title) {
  var i, a;
  for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) {
    if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if (a.getAttribute("title") === title) a.disabled = false;
    }
  }
}

function getActiveStyleSheet() {
  var i, a;
  for(i = 0; (a = document.getElementsByTagName("link")[i]); i++ ) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i = 0; (a = document.getElementsByTagName("link")[i]); i++ ) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

window.onload = function(e) {
  var cookie = readCookie("style");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
}

window.onunload = function(e) {
  var title = getActiveStyleSheet();
  createCookie("style", title, 365);
}

var cookie = readCookie("style");
var title = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(title);

Вызов скрипта:
<div class="box">
	<a class="sw1" href="javascript:void(0)" onclick="setActiveStyleSheet('style'); return false;">Тема 1</a>
	<a class="sw2" href="javascript:void(0)" onclick="setActiveStyleSheet('i2'); return false;">Тема 2</a>
	<a class="sw3" href="javascript:void(0)" onclick="setActiveStyleSheet('i3'); return false;">Тема 3</a>
	<a class="sw4" href="javascript:void(0)" onclick="setActiveStyleSheet('i4'); return false;">Тема 4</a>
	<a class="sw5" href="javascript:void(0)" onclick="setActiveStyleSheet('i5'); return false;">Тема 5</a>
	</div>

При клике в хроме наблюдаю в панели ошибку:
"Uncaught ReferenceError: setActiveStyleSheet is not defined"
Бьюсь уже две недели, подскажите, в чем может быть проблема?

danik.js 20.03.2013 11:29

В этом коде вроде нет ошибок. Проблема где-то выше в документе. Смотрите предыдущие скрипты.

yakto 20.03.2013 13:24

Выше, в хедере:
<link rel="stylesheet" type="text/css" href="style.css" media="screen" title="style"/>
<link rel="alternate stylesheet" type="text/css" href="css/i2.css" media="screen" title="i2"/>
<link rel="alternate stylesheet" type="text/css" href="css/i3.css" media="screen" title="i3" />
<link rel="alternate stylesheet" type="text/css" href="css/i4.css" media="screen" title="i4" />
<link rel="alternate stylesheet" type="text/css" href="css/i5.css" media="screen" title="i5" />
<script type="text/javascript" src="js/styleswitcher.js"></script>

На локалке все работает, ума не приложу, что может быть...

ILL-JAH 20.03.2013 14:50

Что говорят консоли в дургих браузерах? В какой строке Uncaught SyntaxError: Unexpected identifier?

yakto 20.03.2013 15:33

Цитата:

Сообщение от ILL-JAH (Сообщение 241695)
Что говорят консоли в дургих браузерах? В какой строке Uncaught SyntaxError: Unexpected identifier?

В первой строке скрипта, но Chrome и открывает весь скрипт одной строкой.
В опере:
Linked script compilation. Syntax error at line 1 while loading: expected ';', got 'window'
В IE:
Предполагается наличие '}' - строка 1 символ 1897

Кто может посмотреть в других отладчиках или просто помочь разобраться, ссылка - http://am-fline.ru. Сам скрипт - styleswitcher.js.

ILL-JAH 20.03.2013 16:00

Валидатор нашёл 59 ошибок и 35 предупреждений на странице http://am-fline.ru.

danik.js 20.03.2013 16:09

На серваке куда-то пропали переносы строк. Попробуйте выбрать бинарный режим передачи файлов в вашем фтп-клиенте. Сама проблема в недостающих точках с запятой после window.onload и window.onunload свойств.
Ну и на ошибки указанные ILL-JAH забивать не стоит.

yakto 20.03.2013 17:00

Цитата:

Сообщение от ILL-JAH (Сообщение 241714)
Валидатор нашёл 59 ошибок и 35 предупреждений на странице http://am-fline.ru.

Ведутся технические работы :)
jslint.com заставляет даже оформлять код, хотя это не критично.
Цитата:

Сообщение от danik.js (Сообщение 241714)
Попробуйте выбрать бинарный режим передачи файлов в вашем фтп-клиенте. Сама проблема в недостающих точках с запятой после window.onload и window.onunload свойств.

Да, спасибо - бинарный режим, это то что надо.
Редактировал скрипт раз сто, уже не знаю, что повлияло на окончательный результат, но браузер ошибки не выдает. Пока работает некорректно, но знаю как исправить.
Большое спасибо за помощь.:victory:

danik.js 20.03.2013 18:39

Вот тут необходимы точи с запятой (проставил). Думаю jslint их подсказывает.
window.onload = function(e) {
  var cookie = readCookie("style");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
};
 
window.onunload = function(e) {
  var title = getActiveStyleSheet();
  createCookie("style", title, 365);
};

yakto 21.03.2013 08:17

Цитата:

Сообщение от danik.js (Сообщение 241740)
Вот тут необходимы точи с запятой (проставил). Думаю jslint их подсказывает.

Да, я понял, уже поставил. Все работает. Спасибо!!!


Часовой пояс GMT +3, время: 18:30.