Использование строк запроса внутри файла EPUB3
Я делаю книгу EPUB3, содержащую 140 (коротких) видео. Есть индекс-файл с гиперссылками на отдельный showVideo.html
файл, содержащий элемент видео HTML5. Моя идея заключалась в том, чтобы отправить каждое имя файла видео через строку запроса на showVideo.html
который читает строку запроса через javascript и помещает значение в элемент video.
Ссылка на индексный файл:
<a href="showVideo.html?unit=E1">Click to watch E1</a>
Это действительно работает, если я напишу следующий код в manifest
из моего content.opf
файл:
<item id="vid_player" href="showVideo.html?unit=E1"
media-type="application/xhtml+xml"/>
Но если я сделаю это таким образом, я должен добавить 140 пунктов в манифест. Простое исключение строки запроса в манифесте не работает:
<item id="vid_player" href="showVideo.html"
media-type="application/xhtml+xml"/>
У вас, ребята, есть решение? Метод строки запроса был только моей идеей, может быть, есть лучшая техника.
Спасибо
Marvin
3 ответа
Избежать epubcheck
Слишком придирчивая проверка, вы можете сделать следующее.
Добавить
data-video
приписать<a>
элемент, как в<a data-video='E1'>
,Добавить прослушиватель событий в
click
событие на соответствующем<a>
элементы.В обработчике события установите
location.href
в"showRef.html?Unit=" + elt.dataset.video
или эквивалентВ
showRef.html
, разобрать строку запроса и сделать правильные вещи.
Так как вы все равно используете JS для анализа идентификатора видео, попробуйте использовать идентификатор фрагмента вместо параметра запроса: <a href="showVideo.html#E1">
Вы не получите ошибку проверки таким образом, и вы можете получить значение в JS как location.hash
,
Если вы действительно хотите использовать JavaScript для этого, попробуйте то, что предложила Лиза Дейли, имея в виду, что ваша электронная книга EPUB 3 теперь, вероятно, будет работать только на iBooks (возможно, в приложениях Readium и Kobo).
Если ваша единственная цель - "выбрать" видео, почему бы вам просто не сгенерировать одну страницу XHTML для каждого видео и не указать им ссылки из списка воспроизведения? В конце концов, 140 - это не большое количество элементов, которые нужно добавить в манифест.
Кроме того, вы можете создать одну страницу XHTML, скажем, videoplayer.xhtml
, с помощью div
s (со связанными свойствами CSS page-break-after
, page-break-before
) как это:
<div class="videoplayer" id="video001">
<video src="video001.mp4" ... />
</div>
<div class="videoplayer" id="video002">
<video src="video002.mp4" ... />
</div>
...
<div class="videoplayer" id="video140">
<video src="video140.mp4" ... />
</div>
так что ваш плейлист будет ссылаться на videoplayer.xhtml#video001
и т. д. Не используя JavaScript, у вас больше шансов, что он будет работать на нескольких устройствах.