Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Загрузка скрипта по ошибке 404 (https://javascript.ru/forum/misc/13345-zagruzka-skripta-po-oshibke-404-a.html)

ikarushka 27.11.2010 11:55

Загрузка скрипта по ошибке 404
 
Прошу прощения за идиотский вопрос. Но сам разобраться не могу, хотя честно и много гуглил. Что-то я туплю. Есть задача реализовать следующую вещь:

На странице есть <script src='fileNN.js'>. Возможна ситуация, когда скрипта fileNN.js на сервере не будет, тогда нужно подгрузить вместо fileNN.js - файл error.js.

Понятно, что можно было бы это дело c легкостью устроить с помощью php, но не охота. Можно ли это сделать с помощью конфигурации сервера, с помощью отлова ошибки 404. Или с помощью js, но тогда надо отловить, что fileNN.js не загружен и надо загружать error.js.

В js к сожалению пока не селен - ткните, пожалуйста, носом где копать?

monolithed 27.11.2010 12:23

Цитата:

Сообщение от ikarushka
Понятно, что можно было бы это дело c легкостью устроить с помощью php, но не охота.

Неохота и не умею - разные вещи. Это делается 1-2 минуты если что.

monolithed 27.11.2010 12:28

Навскидку:

<?php
$filename = 'file1.js';

if(file_exists($filename)) {
    echo '<script type=\"text\/javascript\" src=\"'.$filename.'\.js\"><\/script>';
}
else {
    echo '<script type=\"text\/javascript\" src=\"file2\.js\"><\/script>';
}
?>

ikarushka 27.11.2010 12:34

Нее дело в не не умею. Понятно что с серверным скриптом это две секунды. Проверил есть файл на сервере - отдал его содержание, нет отдал содержание заглушки. Задача стоит именно в том чтобы нагружать сервак, как можно меньше и попробовать решить задачу через конфигурацию сервака.
Ну что-то вроде .htaccess
ErrorDocument 404 /error.js
Ну понятно что такая конструкция в случае script src работать не будет, но может есть какие-то пути?

ikarushka 27.11.2010 12:38

monolithed спасибо за совет. Но задача стоит именно избежать использования php.

Kolyaj 27.11.2010 12:39

Цитата:

Сообщение от ikarushka
ErrorDocument 404 /error.js
Ну понятно что такая конструкция в случае script src работать не будет, но может есть какие-то пути?

Почему не будет?

ikarushka 27.11.2010 12:51

Вот в том то и дело, что не работает. Проверял. Если мы в адресную строку браузера вводим http://site.ru/file(которого нет).js то перенаправление происходит и мы получаем в окне браузера код файла error.js.
Но в случае <script src='http://site.ru/file(которого нет).js'>. <script> получает 404 и все. Вот тут моих знаний не хватает и я недопонимаю. То ли это связано с защитой - мы подсовываем <script> файл, который он не просил, или в чем-то другом дело?

ikarushka 27.11.2010 13:01

<script src='file(которого нет).js' onError="this.src='error.js';"/>
Такая конструкция тоже не работает. Но как я понимаю это связано с тем, что у script нет события onError. Поправьте меня если не прав.

ikarushka 27.11.2010 15:11

Решить через настройку конфигурации сервака так ничего и не получилось. Если кто знает возможно ли загрузить файл в script src по 404 ошибке, буду очень признателен за разъяснения.

Проблему пока решил следующим образом.

Скрипты подгружаются на страницу так:

<script type="text/javascript" charset="UTF-8">
		     document.write("<script type='text/javascript' src='http://site/error.js' charset='UTF-8' >")
			 document.write("<\/script>")
			 document.write("<script type='text/javascript' src='http://site/fileNN.js' charset='UTF-8' >")
			 document.write("<\/script>")
</script>


error.js:
document.write('<div id="blank" ><img src="http://site/error.jpg" ><\/a><\/div>');


fileNN.js:
var content = '<div id="content" >Bla-bla-bla</div>';
var blank = document.getElementById('blank');
blank.innerHTML = content;


Соответственно заглушка (error.js) грузится всегда. Если файл fileNN.js существует, то его содержание перезаписывается на место заглушки.
Если файла fileNN.js не существует, то ничего не происходит и посетитель видит заглушку.

Так как я полный нуб в js, прошу оценить приемлемо ли такое решение или можно придумать, что-то поизящние?

dmitriymar 27.11.2010 19:03

сделай проще(если инет медленный посетитель увидит что несуществует и уйдёт не дождавшись загрузки). динамически подключи скрипт нужный(при условии что его подключение нужно динамическое-если нет то просто подключи его)-и пререходи на одну из его функций(а именно присвой переменной маркеру с страницы какое либо значение) если после проверки на значение этой пременной-тебе покажет что в ходе выполнения функции из скрипта значение этой переменной не было изменено -подключай другой скрипт динамически.


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