Как родительское окно Javascript может отправлять данные во всплывающее окно? - PullRequest
2 голосов
/ 04 марта 2011

Я пишу браузерное приложение (или, скорее, быстрое создание прототипа приложения) с использованием HTML и Javascript.Я бы хотел, чтобы главное окно отображало всплывающие окна с динамическими данными.Тем не менее, я не могу понять, как перенести данные из родительского окна во всплывающее окно в Javascript.Обратите внимание, я работаю с предположением, что приложение может использоваться в «автономных» сценариях, поэтому все динамические данные должны поступать из главного окна.

В идеале я хотел бы написать

var popup = window.open("popup.html", someidentifier, "");
popup.document.getElementById("SomeIdInPopupHtml").innerHTML = "1,2,3,4";

Однако функция getElementById возвращает NULL.Как я могу отправить данные во всплывающие окна из родительского окна?

Ответы [ 4 ]

1 голос
/ 04 марта 2011

Однако функция getElementById возвращает NULL.

Потому что popup.html еще не загружен. Если вы хотите взаимодействовать с содержимым документа, вам придется перезвонить позже, когда он закончит загрузку.

Для полностью динамических всплывающих окон: open их с пустым URL и popupwindow.document.write их содержание в них. Для всплывающих окон с совместным сценарием, загружаемых из отдельного документа, пусть дочерний документ вызывает своего родителя, когда он готов к доступу. Или просто используйте всплывающие div на странице, которые обычно меньше раздражают, как для вас, как для кодера, так и для конечного пользователя.

1 голос
/ 04 марта 2011

Всплывающее окно обслуживает контент из домена, отличного от родительского?Если да, то короткий ответ: вы не можете.

Длинный ответ заключается в том, что вы можете отправить фрагмент href всплывающего окна (то есть часть после # in protocol: // server / path? Query # фрагмента),Если содержимое всплывающего окна знает, что нужно проверить его фрагмент на наличие изменений, вы можете передать в него данные.

Если это из того же домена, то ваш код должен работать, пока существует элемент с таким идентификатором.

0 голосов
/ 04 марта 2011

Позвольте мне начать с представления возможного решения, с которым я только что экспериментировал. Я хотел бы поощрять обратную связь и лучшие решения, однако ...

Не очень аккуратно, но я могу добавить параметры запроса в стиле GET к исходному URL всплывающего окна:

var popup = window.open("popup.html?" + identifier, somename, "");

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

var model = window.opener.getModel(document.location.href.split("?")[1]);
do_something_with_model(model);

Эта стратегия работает не во всех случаях, особенно когда данные нелегко маршалировать в реализацию getModel(). Однако, в моем случае, я думаю, что этот подход может работать.

Буду признателен за отзыв об этой стратегии. Спасибо!

0 голосов
/ 04 марта 2011

Когда пользователь нажимает на вашу ссылку, чтобы открыть всплывающее окно, передайте ему строку запроса и затем отреагируйте на это значение с помощью кода на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...