Гиперссылки в версии для печати

версия для печати

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

На JavaScript исполнен простенький код, собирающий все ссылки документа в одном месте. Почему бы не писать их прямо в тексте? Мне кажется неудобным, читая распечатку, пропускать глазами вставки URL, которые бывают ооочень длинными и нечитабельными. Вместо этого js-код поставит сноску после текста в парном теге <a>, а все расшифровки будут в конце статьи. Для примера можно посмотреть версию для печати текущей статьи.

Развивая идею, если в теге был указан параметр title, его тоже нужно писать в расшифровке, это значительно улучшает восприятие последующего за ним URL-адреса. И последний из текущих штрихов: якоря для перемещения внутри текущего документа не включать в список ссылок, потому что это бесполезная информация. Т.о. образом получился следующий код:

var anc=document.links;//все сслыки в документе
var fn_text='', ttl;
var sup=1;             //счетчик сносок
for(var i=0,cnt=anc.length; i<cnt; i++){
 //пропускать якоря с переходами внутри документа                           
 if(anc[i].hash && removeHash(anc[i].href)==location.href) continue;
 anc[i].innerHTML+=' <sup>['+String(sup)+']</sup>';//Ставим сноску
   //Собираем расшифровку
  if(anc[i].title) ttl='"<i>'+anc[i].title+'</i>" '; else ttl='';
   fn_text+=String(sup)+' - '+ttl+'<b>'+anc[i].href+'</b><br>';
    sup++;
}
if (fn_text!='') document.write('<hr><h6>Адреса ссылок, использованных в статье:</h6>'+fn_text);

//Возвращает весь URL без хеша в конце адреса (той батвы, что начинается с #)
function removeHash(a){ return a.slice(0,a.lastIndexOf('#')); }

Предполагается, что сам адрес документа для печати не имеет хеша. Иначе нужно до цикла завести еще одну переменную, в которую будет записан результат removeHash(location.href). Здесь пример, использующий все описанные ньюансы. В указанной статье есть несколько внутренних переходов и несколько гиперссылкок. В расшифровке - только последние.

Обращение к версии для печати со стороны юзера - событие крайне редкое. Поэтому я решил не переносить этот код в отдельный файл и уж тем более не назначать его вызов обработчику события "DOM построен", т.е. не стал усложнять сущности без необходимости :) У меня JavaScript-вставка стоит в конце шаблона, собирающего страницу для печати. Поэтому выполнение кода заканчивается записью в документ (строка 13).

[1oo%, EoF]

Понравилась статья? Расскажите о ней друзьям:


Комментарии
Для работы модуля комментариев включите javaScript


Показать/скрыть правила
Имя
[i] [b] [u] [s] [url]
:-) ;-) :D *lol* 8-) :-* :-| :-( *cry* :o :-? *unsure* *oops* :-x *shocked* *zzz* :P *evil*

Осталось 1000 символов.
Код защиты от спама Обновить код
Каждый комментарий проходит ручную модерацию. 100% фильтрация спама.
Продвижение
Время
Метки