ventanas ventana propiedades para open nueva navegador hija flotante emergente con abrir javascript silverlight browser silverlight-3.0 navigation

javascript - propiedades - utilizando el método HtmlPage.Window.Navigate de Silverlight 3 para reutilizar una ventana del navegador ya abierta



ventanas con javascript (3)

¿Estás seguro de que esto no es una configuración del navegador? Uso HtmlPage.Window.Navigate(new Uri(url)) y siempre navega por la pestaña actual en la que se encuentra mi control Silverlight.

Quiero utilizar una ventana de navegador externa para implementar una funcionalidad de vista previa en una aplicación Silverlight. Hay una lista de elementos y cada vez que el usuario hace clic en uno de estos elementos, se abre en una ventana del navegador por separado (el contenido es un documento en formato pdf, por lo que se maneja fuera de la aplicación SL).

Ahora, para lograr esto, simplemente uso

HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "_blank");

que funciona bien

Ahora a mi cliente no le gusta el hecho de que cada clic abre una nueva ventana del navegador. Le gustaría ver la ventana del navegador reutilizada cada vez que se hace clic en un elemento. Así que salí e intenté implementar esto:

Opción 1 : use la sobrecarga del método Navigate, de esta forma:

HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "foo");

Asumí que la ventana se reutilizaría cuando el mismo valor del parámetro objetivo (foo) se usaría en llamadas posteriores.
Esto no funciona. Me sale una nueva ventana cada vez.

Opción 2 : utilice el método PopupWindow en la página Html

HtmlPage.PopupWindow(new Uri("http://www.bing.com"), "blah", new HtmlPopupWindowOptions());

Esto no funciona. Me sale una nueva ventana cada vez.

Opción 3 : obtener un control de la ventana abierta y reutilizar eso en llamadas posteriores

private HtmlWindow window; private void navigationButton_Click(object sender, RoutedEventArgs e) { if (window == null) window = HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "blah"); else window.Navigate(new Uri("http://www.bing.com"), "blah"); if (window == null) MessageBox.Show("it''s null"); }

Esto no funciona. Intenté lo mismo para el método PopupWindow () y la ventana es nula cada vez, por lo que se abre una nueva ventana en cada clic. He comprobado las propiedades EnableHtmlAccess y IsPopupWindowAllowed, y devuelven verdadero, como deberían .

Opción 4 : utilizar el método Eval para ejecutar JavaScript personalizado

private const string javascript = @"var popup = window.open('''', ''blah'') ; if(popup.location != ''http://www.bing.com'' ){ popup.location = ''http://www.bing.com''; } popup.focus();"; private void navigationButton_Click(object sender, RoutedEventArgs e) { HtmlPage.Window.Eval(javascript); }

Esto no funciona. Me sale una nueva ventana cada vez.

opción 5 - Use CreateInstance para ejecutar javascript personalizado en la página

private void navigationButton_Click(object sender, RoutedEventArgs e) { HtmlPage.Window.CreateInstance("thisIsPlainHell"); }

y en mi aspx tengo

function thisIsPlainHell() { var popup = window.open(''http://www.bing.com'', ''blah''); }

Esto no funciona Me sale una nueva ventana cada vez.

¿Estoy haciendo algo mal? Definitivamente no soy un experto en JavaScript, así que espero que sea algo obvio que me falta aquí.

Saludos, Phil


Aparentemente, el problema es que la propiedad window.name se pierde al navegar a bing.com. Cuando navego a una de mis páginas personalizadas, parece estar funcionando bien.


Esta es una característica de seguridad del navegador. La reutilización de ventanas nombradas se limita al dominio de la corriente del documento que se muestra en esa ventana.

Su página que aloja el control de Silverlight se ejecutará desde " http://www.yoursite.com ", por lo tanto, solo puede volver a usar la ventana denominada "foo" si esa ventana también muestra contenido de " http: //www.yoursite". .com ". Como ha cargado " http://www.bing.com " en esa ventana, ya no es visible para el código que se ejecuta en el contexto " http://www.yoursite.com ". Por lo tanto, cuando abre una ventana con "Foo", el navegador no ve una ventana actual con ese nombre y, por lo tanto, crea otra.