Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как обойти base href, чтобы ссылка на внешн. js была локальной? (https://javascript.ru/forum/misc/23256-kak-obojjti-base-href-chtoby-ssylka-na-vneshn-js-byla-lokalnojj.html)

Andrej_2 17.11.2011 20:59

Как обойти base href, чтобы ссылка на внешн. js была локальной?
 
Здравствуйте!
Допустим, есть сайт, на каждой странице которого в <head> прописан <base href="http://www.mysite.ru">, чтобы в коде всем ссылкам не прописывать полные пути и не перегружать тем самым код. Можно оставить относительные пути и убрать base href, но это не желательно, т.к. при сохранении страниц в браузерах (кроме ИЕ) остануться относительные пути и ссылки будут нерабочими. Страницы часто сохраняются для локального просмотра. При этом в нескольких местах вставляются внешние js, но ссылки на эти скрипты должны быть относительными и запиханными в другой скрипт, чтобы не сохранять скрипты и при просмотре сохраненной страницы браузер не лез в онлайн подгружать эти скрипты.

Так как можно совместить <base href="http://www.mysite.ru"> и относительные пути для внешних js, подгружаемых кодом типа

<script>
document.write("<script src='reclama.js?"+Math.random()+"'></sc"+"ript>");
</script>


Пока что получается лишь каждую нужную ссылку писать с полными путями, а так как ссылок много, идут лишние килобайты.

Aetae 17.11.2011 22:27

Зачем же вам так много левых скриптов на старице?

И раз уж используете скрипт, юзайте переменные:
<script>
var b='http://www.mysite.ru/';
document.write("<script src='"+b+"reclama.js?"+Math.random()+"'></sc"+"ript>");
</script>

Andrej_2 18.11.2011 11:25

Спасибо, но это не совсем то. Наверное, я неправильно объяснил. Попробую еще раз. Я делаю движок, чтобы сайт был удобен пользователю в плане сохранения информации. Т.е. предполагаестя, что страницы часто сохраняются на комп для дальнейшего просмотра в оффлайн. Обычно при сохранении страниц некоторые браузеры (ИЕ, к примеру), начинают загружать и перепроверять все заново: картинки, скрипты, в том числе скрипт счетчика, сам код и текстовый контент. Это раздражает, т.к. тянет время. Я сделал загружаемым только сам код с контентом, а ненужные в сохраненной версии картинки дизайна и внешние ява-скрипты у меня прописаны с относительными путями, причем контрольный ява-скрипт приписан как указано выше. По нему определяется, в оффлайне или в онлайне пользователь. В результате не только быстро все загружается, но и при открытии сохраненной страницы все происходит мгновенно, ничто в коде не стучится в интернет и не ждет ответа с сервера. В сохраненной версии, кроме того, выбрасывается лишний дизайн, код счетчика, реклама, чтобы страницы не весили много. Вроде, все получилось. Но вот засада в том, что только эксплорер при сохранении страницы перебивает локальные ссылки, делая их полноценными. Т.е. из сохраненной страницы все ссылки навигации доступны. Другие браузеры сохраняют локальные ссылки, видимо, у них в приоритете base href. Если я прописываю base href, то тогда локальная ссылка на base href становится не локальной и все вышеописанное преимущество сводится на нет: все внешние ява-скрипты и прописанные в них коды счетчика, рекламы, расширенного дизайна сохраняются или при открытии страницы подгружаются из интернета. Я так понял, задача нерешаемая и браузер в этом плане не обмануть. Поэтому придется прописывать полные пути для каждой нужной ссылки, не используя base href, а в путях к скриптам и ненужным в сохраненной версии картинкам оставлять локальные пути.


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