Какова область применения window.name в IE? - PullRequest
1 голос
/ 16 апреля 2009

У нас есть продукт, в котором есть как 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 кажется, что он глобален для всех открытых экземпляров, но с другой стороны это кажется совсем наоборот.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 08 мая 2009

В IE7 и в предыдущих версиях, насколько мне известно, параметры имени относятся к конкретному экземпляру процесса IE. Как правило, запуск IE вручную создает новый процесс. Любые окна, созданные с помощью js или даже нажатием кнопки «Новое окно» в IE, создают новое окно, которое все еще выполняется в текущем процессе. При этом условии имя находится в области действия этих окон.

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

При этом я не уверен, какой процесс вы можете реализовать, чтобы проверить имя "кросс-процесс". Один из вариантов, в зависимости от того, какой у вас контроль над веб-приложением, к которому они обращаются, может состоять в том, чтобы сервер отслеживал список идентификаторов пользователя и сеанса, и когда для пользователя появляется вторая запись, это означает, что он имеет откройте второй браузер и обработайте его соответствующим образом.

0 голосов
/ 19 апреля 2009

Вы пробовали window.createPopup? Не знаю, будет ли это работать лучше, но если вам не нужен «хром», возможно, стоит попробовать. Для получения дополнительной информации проверьте MSDN: http://msdn.microsoft.com/en-us/library/ms537638(VS.85).aspx

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