JavaScript: как общаться между 2 окнами?
Я понимаю, как открывать окна и обмениваться данными между исходным окном, которое открыло 2-е окно, и 2-м окном, чтобы связаться с исходным окном. Однако у меня есть ситуация, когда у меня есть оригинальная страница и страница 1. Эти страницы представляют собой 2 разных сценария PHP, которые выполняются как отдельная страница.
Страница 1 открывает окно с веб-страницей клиентов внутри. Мы назовем это окно 1.
Исходная страница открывает окно 2 и окно 3. Эти окна загружаются в файлы php, содержащие инструменты редактирования. Мне нужно, чтобы эти окно 2 и окно 3 связывались с исходной страницей для редактирования содержимого окна 1. Я не понимаю, как это возможно. Я видел только учебники и книги, говорящие об оригинальной странице, и окна, которые она создает, - единственные, которые могут получить доступ друг к другу. Итак, я знаю, что теоретически я не могу заставить исходную страницу взаимодействовать с окном 1, потому что окно 1 было создано страницей 1.
Есть ли способ обойти это? Страница 1 открывает содержимое... как изображения, веб-страницы... и т. Д. У меня он уже настроен таким образом. Мне нужно, чтобы у меня были инструменты окна для доступа к окну контента. Таким образом, они могут редактировать веб-страницы или изображения. Как я могу сделать это, если это возможно?
Нет, это не тот же вопрос. Мне нужно изменить документ, чтобы внести изменения в HTML. Таким образом, использование куки не решит мою проблему. Мне нужно отредактировать содержимое в другом окне, которое было открыто другой веб-страницей, но оно все еще является частью того же домена.
1 ответ
Обновлено 05/21
Для справки: https://github.com/dboots/crossWindowAjax
Демо: http://www.donboots.com/so/index.php и http://www.donboots.com/so/index2.php
Это довольно простое решение для опроса между окнами, которые используют файл /js/editor.js, найденный в github repo /
/index.php, /index2.php - они просто открывают наши всплывающие окна.
/colors.php, /tools.php - наши всплывающие окна, которые содержат функцию poll(), а также имеют примеры использования функции set(). Обе они являются пользовательскими функциями, которые находятся в /js/editor.js
/js/editor.js - это мост между нашими всплывающими окнами и файлом PHP (/js/ajax/process.php).
/_classes/Editor.php - это класс, который /js/ajax/process.php использует для установки / получения наших переменных. В этом примере он устанавливает / получает переменные $_SESSION, но этот класс может быть расширен для использования любого вида файлового хранилища, базы данных и т. Д.
Оригинальный ответ (не актуально)
Я полагаю, что это может быть решено путем бросания вокруг области видимости переменной окна.
Этот сценарий соответствует вашим потребностям?
Окно 1
//-- window 1 variable
var page_variable = "page_variable";
//-- handle for window A
var windowA = window.open('windowA.php', 'windowA', 'height=200,width=600');
//-- handle for windowB
var windowB = window.open('windowB.php', 'windowB', 'height=400,width=500');
windowA.php
//-- local windowA variable
var windowA_variable = "windowA Variable";
//-- windowB variable accessed via opener (window 1)
var windowB_variable = opener.windowB.windowB_variable;
//-- window 1 variable
var page_variable = opener.page_variable;
windowB.php
//-- local windowB variable
var windowB_variable = "windowB Variable";
//-- windowA variable accessed via opener (window 1)
var windowA_variable = opener.windowA.windowA_variable;
//-- window 1 variable
var page_variable = opener.page_variable;