Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.04.2010, 10:29
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Загрузка файла без AJAX.
Передо мной стоит задача загрузить JS файл на клиета без AJAX. Главное условие - в сценариях я должен иметь доступ к исходному тексту скрипта. Так как код не попадает в DOM при использовании тега script, я пробовал разные варианты:

1. Iframe
В нормальных браузерах код отображается во фрейме и я могу получить исходный код. Но ишак вместо этого предлагает скачать файл, т.к. расширение его - js, а он ждет html. Не хотелось бы накладывать лишние ограничения по именам и заголовкам запроса.

2. Object & Embed
Через тег object можно указывать тип подключаемого объекта. Пробовал разные типы: plain/text, text/html, text/javascript - код не выводится и через DOM не доступен. С такими типами - text/xml, application/xml и application/text-xml уже есть какое-то движение: появляется ошибка парсера xml и через контекстное меню, "Исходный код HTML" я всё-таки вижу код файла, но через DOM получить не смог. Хотя можно получить первую строку из ошибки парсера и если файл будет сжат в 1 строку - можно получить весь код. Но это опять же лишние ограничения. С тегом embed вообще ничего интересного не смог добиться.

3. ActiveX DOM XML
Пробовал и таким способом, конкретно через метод load. Но опять же парсер XML падает с той же ошибкой.

Не устраивает аякс по нескольким причинам: нужен лишний кроссбраузерный код, хоть и не большой, а так же его ограничение на количество открытых соединений. Лучше когда браузер сам качает.

Какие ещё варианты могут быть? Я уже незнаю...
Ответить с цитированием
  #2 (permalink)  
Старый 26.04.2010, 10:47
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от B~Vladi
нужен лишний кроссбраузерный код
Да там две строчки.

Сообщение от B~Vladi
его ограничение на количество открытых соединений
Это не его ограничение, а браузера, независимо от типа соединения.
Ответить с цитированием
  #3 (permalink)  
Старый 26.04.2010, 11:02
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от Kolyaj
Это не его ограничение, а браузера, независимо от типа соединения.
Ну да, ты меня понял. При том ограничения у всех свои.

Сообщение от Kolyaj
Да там две строчки.
2 строчки добавляют 10 багов блин
Если дать браузеру качать файлы, он в любом случае сделает это лучше и все ограничения разрулит сам. Ну если не удаться по-другому, то конечно придётся аяксом.

Поясню для чего мне нужен исходный код. Дело в том, что для нормального API, его необходимо запускать в контексте определённого объекта и в специальном scope.
Ответить с цитированием
  #4 (permalink)  
Старый 26.04.2010, 11:12
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от B~Vladi
2 строчки добавляют 10 багов блин
Также как и любые другие две строчки. Почему с iframe'ом не будет багов?

Сообщение от B~Vladi
Если дать браузеру качать файлы, он в любом случае сделает это лучше и все ограничения разрулит сам.
XHR-запросы он тоже сам разруливает.

Сообщение от B~Vladi
Дело в том, что для нормального API, его необходимо запускать в контексте определённого объекта и в специальном scope.
На код, как я понимаю, накладываются какие-то ограничения? Почему бы не наложить тогда, что код должен лежать внутри функции с определённым именем, а уж её и вызывать в нужном контексте.

Если нужен точный исходник файла, то только два варианта: 1. XHR, 2. Посредник на сервере, который будет оборачивать ответ в jsonp, например.
Ответить с цитированием
  #5 (permalink)  
Старый 26.04.2010, 12:11
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от Kolyaj
На код, как я понимаю, накладываются какие-то ограничения?
Вот в том то и дело, что хочу избавиться от этого. Контекст выполнения нужен для этого скрипта и по-сути его больше ничего не должно интересовать. Scope нужен для того, чтобы в него не попали переменные из scope либы. Так что в глобальную область видимости ничего не попадает. В принципе это уже всё реализовано и такое API меня больше чем устраивает.
Сообщение от Kolyaj
XHR-запросы он тоже сам разруливает.
Т.е. если, например, создать 5 тегов script и 5 аякс-запросов поведение будет одинаковым?
Сообщение от Kolyaj
Почему с iframe'ом не будет багов?
Да какие там могут быть баги. Он ещё плох тем, что не смогу получить текст, если грузиться он будет с другого домена.
Сообщение от Kolyaj
два варианта: 1. XHR, 2. Посредник на сервере, который будет оборачивать ответ в jsonp, например.
Ну второй точно отпадает. Тогда уж можно было бы завернуть это в xml.

Последний раз редактировалось B~Vladi, 26.04.2010 в 12:16.
Ответить с цитированием
  #6 (permalink)  
Старый 26.04.2010, 14:16
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Причем если открывать файл локально, то он показывается, если через http - качается
Тупой ишак.
Ответить с цитированием
  #7 (permalink)  
Старый 26.04.2010, 14:19
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 03.04.2008
Сообщений: 6,233

Сообщение от B~Vladi
Тупой ишак.
на зеркало неча пенять...
попробуй отдавать скрипт без content-type,или отличным от умолчательного для JS
Ответить с цитированием
  #8 (permalink)  
Старый 26.04.2010, 14:28
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от Gvozd
на зеркало неча пенять...
Норм у меня руки. Всё из-за того, что в ишаке расширение js не известно. Стоит только переименовать на txt или html и всё ок. Но скрипт должен быть js.
Сообщение от Gvozd
попробуй отдавать скрипт без content-type,или отличным от умолчательного для JS
Ну всё сходится к выбору между сменой заголовка или XHR. В первом варианте не хотелось бы ещё и на сервер добавлять обязательства, а во втором... Второй вариант это уже совсем отдельная тема и к либе никакого отношения не имеет. Т.е. придётся это всё оформлять в виде плагина к либе. В принципе тоже вариант. Что бы выбрали вы?
Ответить с цитированием
  #9 (permalink)  
Старый 26.04.2010, 14:38
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 03.04.2008
Сообщений: 6,233

Сообщение от B~Vladi
Что бы выбрали вы?
не вижу причин, чтобы не использовать XHR
Ответить с цитированием
  #10 (permalink)  
Старый 26.04.2010, 14:56
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от Gvozd
не вижу причин
А я вижу.
В общем есть некий контроллер низкого уровня. Под ним работают классы, которые реализуют какую-то функциональность (каждый свою). Контроллер же должен быть независимым и отказоустойчивым. Доступен он только для тех классов, которые под ним работают, т.к. между ними есть своё API. Так же могут быть какие-то общие компоненты, которые могут использоваться этими классами, например работа с AJAX или событиями. Пока точно не решено выносить такие компоненты в отдельный тип или же приравнять к классам. В первом варианте создаётся зависимость контроллера от компонента, что не приемлемо. Если тот же код внести в сам контроллер, то получается дублирование (поддержка AJAX в любом случае должны быть извне). В общем лишний он тут совсем. Не знаю, поймёте, нет...

С другой стороны ссылка на js-файл может представлять из себя что угодно, поэтому заголовки всё равно должны быть настроены.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка БОЛЬШИХ файлов посредством ajax barcelona jQuery 7 12.10.2012 02:37
загрузка джаваскрипта file by file с номером ревизии(последней) в урле для файла sergdev Ваши сайты и скрипты 7 13.04.2010 09:52
JQuery + Ajax = загрузка изображений jokerbot jQuery 0 06.12.2009 14:10
Загрузка файла AJAX'ом - почему-то переводит на страницу загрузки файла .andreev AJAX и COMET 13 21.10.2009 21:25
загрузка файла по принципу ajax neadekvat Общие вопросы Javascript 2 12.05.2009 21:23