У нас есть продукт, в котором есть как winforms, так и веб-клиент, и мы предоставляем пользователям способ запуска в другой актив компании (веб-приложение). Нам необходимо убедиться, что у пользователя когда-либо открыт только один экземпляр другого веб-приложения в браузере (или, по крайней мере, у нас открыто для них). Мы достигли этого (вроде), выполнив следующее ...
В клиенте winforms у нас есть скрытый элемент управления WebBrowser, который, когда пользователь нажимает кнопку для запуска другого приложения, записывает небольшую HTML-страницу в свойство DocumentText, содержащее:
window.open('http://othersiteurl', '**sitename**').focus();
В нашем веб-клиенте, когда пользователь нажимает на ту же кнопку, мы делаем что-то похожее:
window.open('http://othersiteurl', '**sitename**');
Только от одного клиента или другого это работает на удивление хорошо. То, что становится липким и странным, - это когда вы пытаетесь получить к нему доступ от обоих клиентов. Если вы сначала запустите другой продукт из приложения winforms, он откроет новое окно, и любые последующие запуски продукта будут загружены любым клиентом в уже открытом экземпляре. Но если вы делаете это наоборот и запускаете из веб-клиента, первый экземпляр запускается на новой вкладке в том же окне, , но затем каждый запуск с клиента winforms переходит в новое окно!
Я использую одно и то же значение для параметра name в window.open в обоих клиентах. Странно видеть, как это работает так ужасно по-другому. Кто-нибудь может объяснить, как параметр 'name' ограничен в IE? (да, это только для IE ... элемент управления WebBrowser размещает IE, а наш продукт только для IE) При первом запуске из клиента winforms кажется, что он глобален для всех открытых экземпляров, но с другой стороны это кажется совсем наоборот.
Есть идеи?