Они не работают. Просмотрщик их вырезает, когда парсит PDF-документ в HTML-страницу. Он хочет видеть протокол из каких-то соображений безопасности, а протокола в относительных ссылках, понятное дело, нет в явном виде.
А у нас в системе, как на грех, куча нормативных документов в PDF с перекрёстными ссылками. А доступ через браузер, через нашу любимую «Файерфокс». Мы пытались зашивать в документы (благо мы их и генерируем) заведомо неправильные, но абсолютные пути, потом перехватывать скриптом щелчки по ссылкам в распарсенном PDF-документе и перенаправлять браузер куда надо. А вот не тут-то было! По неким загадочным причинам у таких документов оказывается document.domain==="pdf.js", срабатывают кроссдоменные ограничения и достучаться к документу в плавающем фрейме или зависимом окне из родительского скрипта мы не можем. Да, HTTP-заголовки пробовали, не помогает.
Решение было найдено в использовании библиотеки
PDFJS,- которая, собственно, потом и была зашита внутрь браузера. Скачиваем, правим в ней одну строчку, затем все обращениями за PDF направляем через её просмотрщик: viewer.html?file=путь_к_файлу. Там, конечно, дальше без хитростей не обошлось, но принцип такой.