Обновлено: теперь я вижу, где «значение» программно редактируется для параметра, поэтому я просто выберу имя параметра, которое должно быть глобально уникальным, и использовать эту методологию.
ИСХОДНЫЙ ВОПРОС:
Подходит ли эта цель для <param />
:
Я использую один тег <object>
для каждого списка файлов камеры наблюдения, и мне нужно программно сохранить отметку файла, отображаемую в <td>
рядом с <td>
любого выбранного пользователем имени файла .mp4 из списка файлов TRANSIENT (или «таблицы») в стиле DOM это <object>
для использования при управлении воспроизведением файла (или «видео») стилем DOM (также временным) для синхронизации времени нескольких <object>
, воспроизводящих свои файлы .mp4 с нескольких камер.
Типичный список <object>
показан ниже, но обратите внимание, что этот <object>
представляет собой комбинированный список видео, снимков и камер, а не один из <object>
, посвященный одной камере или типу файла:
FWIW, я добавляю метки времени в <td aria-label=[timestamp to show]></td>
, чтобы они не могли стать частью операций перетаскивания.
Мы говорим о 5 записанных камерах/видах, которые пользователь будет воспроизводить все 5 вместе, исследуя записанные действия. Каждый файл .mp4 представляет собой всего лишь 6-минутный сегмент в течение интересующего более длительного периода времени, поэтому я также буду загружать и воспроизводить последующие сегменты .mp4 после завершения предыдущего сегмента. FWIW, каждый макет DOM <object>
является временным на уровне, о котором я здесь говорю, так что и информация о файлах, и динамически создаваемые прослушиватели событий теряются из DOM, когда стиль DOM <object>
переходит от objectID.contentDocument.body.table
к objectID.contentDocument.body.video
. Чтобы не потерять всегда ценную, но временную информацию о временной метке файла, содержащуюся в DOM стиля таблицы, я обдумываю идею использования фиктивных <param />
элементов в <object>
для передачи этой временной информации в objectID.contentDocument.body.video
стиль <object>
для конечной целью является то, чтобы все играющие <object>
могли оставаться синхронизированными друг с другом, поскольку они последовательно воспроизводят свои сегменты .mp4.
Я подозреваю, что я ошибаюсь, пытаясь передать данные таким образом, потому что: УЖЕ НЕ СЛУЧАЙ: 1) <param />
кажутся доступными только для чтения везде, где к ним можно было бы получить обычный доступ в DOM, и 2) я бы рискнул выбрать <param />
имя уже заявлено для обычного <object>
использования, и 3) мой уровень владения HTML здесь — новичок.
Подходит ли эта цель для <param />
? Если нет, то наверняка есть лучший способ получить немного информации из переходной части DOM и сохранить ее выше в статической части DOM, не делая этого в глобальных переменных <script>
, верно? ИМХО, по праву, такой фрагмент данных относится к <object>
, к которому он относится, а не к глобальной переменной.
Вот один из моих <object>
, за исключением того, что я показываю его с предположительно включенными <param>
:
<object id = "sysjpgmp4_motion" type = "text/html"
onload = "glonload( sysjpgmp4_motion.contentDocument.body.children[0].currentSrc, getElementById('sysjpgmp4_motion'), '', '', '', '', '')"
onclick = "this.data=this.data;"
data = "/camera_snapshots/camera_*/*jpg /var/www/camera_streams/camera_*/*mp4-MOTION"
width = "1700px"
height = "900px"
style = "font-size:15px;overflow:auto;border:5px solid black;border-width:20px 3px 3px;">
<param name = "timestamp" value = "initial" />
<param name = "filename" value = "initial" />
</object>
Вот function glonload(...)
:
function glonload( currSrc, elid, elname, tagname, arg1, arg2, arg3 )
{
if (elid.contentDocument.body.children[0] != 'undefined' && elid.contentDocument.body.children[0] != null && elid.contentDocument.body.children[0].localName == 'table')
{
if (elid.contentDocument.body.children[0].tBodies[0] == 'undefined' || elid.contentDocument.body.children[0].tBodies[0] == null){alert('Too many event files to list with ' + currSrc + '. Delete overrunning ones on server.');return}
elid.contentDocument.body.children[0].tBodies[0].addEventListener("click",function(item)
{
//The hard-coded 2 pixel corrections below might need to be adjusted for border widths or other style settings the web server might send differently in the future:
var rowindex=Math.trunc((item.pageY+2)/((elid.contentDocument.body.children[0].tBodies[0].clientHeight+2)/elid.contentDocument.body.children[0].tBodies[0].childElementCount)-.5)
var filename=elid.contentDocument.body.children[0].tBodies[0].rows[rowindex].cells[1].innerText
if (elid.contentDocument.body.children[0].tBodies[0].rows[rowindex].cells[1].innerText.endsWith('.mp4'))
{
var timestamp=elid.contentDocument.body.children[0].tBodies[0].rows[rowindex].cells[0].outerHTML.substr(18)
timestamp=timestamp.substring(0,timestamp.indexOf(" ]"))
//THE FOLLOWING LINE IS WHERE I'M ASKING FOR HELP
// elid. =timestamp
//Useful idiot: alert(timestamp)
}
})
}
else
{
//Here the currentSource of object is now a loaded (or loading?) jpg or mp4 viewer.
//Still got that timestamp from the click? We'll need it here if this is the mp4 so all other objects match the time. Let's store it in a non-transcient child of the object element somewhere on click.>
//But which way is the most acceptable?
}
}
Просто выберите глобально уникальное имя параметра и вернитесь к этой идее. В моем случае с именем «отметка времени» доступ к нему осуществляется программно с помощью elid.children["timestamp"]
, а его значение равно elid.children["timestamp"].value
и доступно для редактирования.