2012-08-24 3 views
6

У меня есть html-страница (main.html), открывающая новую вкладку в том же домене, используя javascript с помощью метода window.open ("newtab.html").связь между вкладкой браузера

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

С новой вкладке я хотел бы что-то подобное, но я имею «Ко»

var w = window.opener; 
if (w) { 
    w.postMessage("hi", "http://10.150.10.43"); 
} else { 
    alert("ko"); 
} 

Каков наилучший способ отправить сообщение из вторичного вкладки/окна к главному (в том же домене)?

большое спасибо Лука

+0

возможно дубликат [Могу ли я контролировать два окна браузера с помощью одного приложения HTML5?] (Http://stackoverflow.com/questions/5277482/can-i-control-two-browser-windows-with-one -html5-app) – josh3736

+1

Эй, Лука, не забудьте отметить ответ! Иван заслуживает очков репутации. :-) –

+0

Да, вы правы :) –

ответ

12

Это странно. Открытие нового окна с window.open("newtab.html") должно дать вновь открытому окну возможность ссылаться на открыватель через window.opener.

Во всяком случае, существует несколько других возможностей для связи между двумя окнами в одном домене. Я думаю, что следующие два легче всего реализовать:

  1. Использование LocalStorage. Если вы сохраните некоторые данные под некоторым ключом в localStorage в новом окне вкладки, то в открывающемся окне появится событие хранения. Если вы поймаете событие обработчиком, вы можете прочитать данные из localStorage, которые вы написали в новом окне вкладок. Обратите внимание, что события запускаются только в том случае, если обе страницы находятся в одном домене, и если на самом деле есть два окна (события не запускаются в том же окне, где записаны данные). Для получения дополнительной информации о том, как это сделать, см., Например: http://diveintohtml5.info/storage.html

  2. Использование Общие сведения о веб-работниках. Веб-рабочий - это сценарий JS, который выполняется в фоновом режиме в отдельном потоке. Общие веб-работники - это особый тип веб-работников, которые позволяют любому количеству родительских документов общаться с одним рабочим. Таким образом, вы можете использовать рабочего для передачи сообщений между открывающимся окном и новым окном вкладки. API для общения с рабочими очень похож на API PostMessage. Для получения дополнительной информации о том, как это сделать, см., Например: http://www.sitepoint.com/javascript-shared-web-workers-html5/.