Я могу интерпретировать этот вопрос двумя способами, и я думаю, что оба / оба могут быть полезны, поэтому я собираюсь ответить на оба.
1) Как я могу разделить код (функцию / метод / класс независимо от *) между несколькими фреймами HTML?
Нет действительно правильного способа сделать это в браузере, по крайней мере, не так, как я думаю, что вы хотите. Фреймы, считающиеся устаревшей функцией, не сильно изменились с 90-х годов, и это было до того, как появились большие сложные кодовые базы JS. Не существует собственного способа определения функции «глобально» без учета чего-то вроде расширения браузера.
Обычно это не проблема, потому что типичным способом сделать это является рисование каждого кадра из общего сценария. Вы бы поместили свой скрипт-тег вверху (или внизу) HTML-страницы.
<script src='common-code.js'></script>
Но если вы спрашиваете, как я могу использовать эту функцию JS в каждом кадре, не обновляя отдельный HTML каждого кадра? Тогда я боюсь, что тебе не повезло. Это особенность того, что каждый фрейм считается отдельным документом, и по соображениям безопасности вы не можете обратиться к другому документу и сказать «запустите этот код».
Я бы попытался найти способ массового обновления страниц и добавления тега сценария, который включает или выбирает общий код, или вам может повезти, если какой-то общий HTML уже определен, вы можете добавить его туда.
* Сюрприз, в JavaScript все это одно и то же!
2) Как я могу передать событие (keydown) из одного кадра в другой?
Вы можете эмулировать это, используя postMessage
метод Window
, чтобы отправить сообщение из одного кадра в другой, после чего кадр получателя обработает сообщение, а не собственное событие.
Независимо от того, используете ли вы набор фреймов или фреймы, я думаю, вам придется передавать каждое событие родительскому элементу, который затем отправляет событие обратно, используя список window.frames
. Немного головной боли, но возможно.
(Для ясности, это не снимает ограничения, о которых говорилось в первом ответе. Это - то, как вы добились бы ситуации, когда щелчок в одном кадре «обрабатывается» другим - вам все равно придется обновить оба кадра включить код передачи и обработки сообщений).