Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2013, 09:35
Новичок на форуме
Отправить личное сообщение для evgenij-1963 Посмотреть профиль Найти все сообщения от evgenij-1963
 
Регистрация: 20.03.2013
Сообщений: 3

Почему скрипт работает только в Опере?
Есть скрипт, выводящий картинки наград на форуме (в профилях пользователей), результат работы которого виден только в Опере. В Хроме, Мозилле и IE ничего не видно. Как исправить код, чтобы все отображалось?
Вот этот код:
var awardsProfile = {
	uid: false,
	
	init: function () {
		if (navigator.userAgent.indexOf('MSIE') == -1) {
			document.addEventListener('DOMContentLoaded', function () {awardsProfile.start();}, false);
		}
		else {
			this.start();
		}
	},
	
	start: function () {
		JsHttpRequest.query('jsloader.php?loader=awards', {action: 'medals', users: [this.uid], profile: 'yes'},
			function (data, text) {awardsProfile.printMedals(data, text);}, false);
	},
	
	printMedals: function (data, text) {
		var div = document.getElementById('awards');
		var a, img;
		
		for (id in data.medals[this.uid]) {
			if (id = id.match(/\d+/)) {
				id = id[0];
				
				a = document.createElement('a');
				a.href = 'tools.php?action=awards&do=award&id=' + id;
				a.target = '_blank';
				a.title = data.info[id][0];
				
				img = document.createElement('img');
				img.src = data.info[id][1];
				a.appendChild(img);
			}
			else {
				a = document.createElement('a');
				a.href = 'tools.php?action=awards&do=show&member=' + this.uid;
				a.target = '_blank';
				a.innerHTML = data.medals[this.uid].a;
			}
			
			div.appendChild(a);
		}
	}
};

awardsProfile.init();
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2013, 10:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 31,060

Сообщение от evgenij-1963
start();
для начала измените название функции на любое другое во всех местах скрипта где это название используется
Ответить с цитированием
  #3 (permalink)  
Старый 20.03.2013, 21:09
Новичок на форуме
Отправить личное сообщение для evgenij-1963 Посмотреть профиль Найти все сообщения от evgenij-1963
 
Регистрация: 20.03.2013
Сообщений: 3

Переименование start() ничего не изменяет.
Скрипт в первом посте показан полностью. А его вызов происходит из php.
$show_awards = '';
if ($fm->exbb['awards']) {
	$fm->_Link .= "\n" . '<script type="text/javascript" language="JavaScript" src="modules/awards/javascript/awardsProfile.js" defer="true"></script>' .
		"\n" . '<script type="text/javascript" language="JavaScript">' .
		"\n awardsProfile.uid = {$user_id};" .
		"\n</script>";
}


Как сделать, чтобы скрипт из первого поста работал во всех браузерах?
Ответить с цитированием
  #4 (permalink)  
Старый 20.03.2013, 21:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 31,060

Сообщение от evgenij-1963
a.innerHTML = data.medals[this.uid].a;
а вот эта a с точкой не лишняя?
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2013, 04:58
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от evgenij-1963
defer="true"
Сообщение от evgenij-1963
document.addEventListener('DOMContentLoaded'
Если у скрипта выставлен атрибут defer, то он будет загружен после загрузки документа и срабатывания DOMContentLoaded. Поэтому во всех браузерах, не имеющих MSIE в строке юзерагента, скрипт не выполнится, ибо DOMContentLoaded уже произошел и второй раз не произойдет. Так что либо убрать defer, либо в скрипте вызывать this.start() вне зависимости от браузера, либо проверять document.readyState и ждать DOMContentLoaded только если он не 'complete'.
Ответить с цитированием
  #6 (permalink)  
Старый 23.03.2013, 13:59
Новичок на форуме
Отправить личное сообщение для evgenij-1963 Посмотреть профиль Найти все сообщения от evgenij-1963
 
Регистрация: 20.03.2013
Сообщений: 3

Удаление атрибута defer помогло частично, скрипт теперь выполняется во всех основных браузерах, кроме IE.
danik.js, +

Последний раз редактировалось evgenij-1963, 23.03.2013 в 14:02.
Ответить с цитированием
  #7 (permalink)  
Старый 23.03.2013, 15:14
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Можно просто опустить скрипт вниз body, перед закрывающим </body>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему скрипт работает в IE6 и не работает в opera и IE8? msufx Javascript под браузер 6 18.09.2009 17:44
Скрипт меню работает только под IE7 и выше TAILER Internet Explorer 1 31.08.2009 12:21
Скрипт меню не работает только в Firefox somatic Firefox/Mozilla 2 28.07.2009 02:23
Скрипт не работает в опере, работает в IE XpycTuk Общие вопросы Javascript 9 06.03.2009 14:50
Не работает скрипт в Опере 312kbps Общие вопросы Javascript 1 16.10.2008 17:11