Hi,
I want to use an external browser window to implement a preview functionality in a silverlight application. There is a list of items and whenever the user clicks one of these items, it's opened in a separate browser window (the content is a pdf document, which is why it is handled ouside of the SL app).
Now, to achieve this, I simply use
HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "_blank");
which works fine.
Now my client doesn't like the fact that every click opens up a new browser window. He would like to see the browser window reused every time an item is clicked. So I went out and tried implementing this:
Option 1 - Use the overload of the Navigate method, like so:
HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "foo");
I was assuming that the window would be reused when the same target parameter value (foo) would be used in subsequent calls.
This does not work. I get a new window every time.
Option 2 - Use the PopupWindow method on the HtmlPage
HtmlPage.PopupWindow(new Uri("http://www.bing.com"), "blah", new HtmlPopupWindowOptions());
This does not work. I get a new window every time.
Option 3 - Get a handle to the opened window and reuse that in subsequent calls
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");
}
This does not work. I tried the same for the PopupWindow() method and the window is null every time, so a new window is opened on every click. I have checked both the EnableHtmlAccess and the IsPopupWindowAllowed properties, and they return true, as they should.
Option 4 - Use Eval method to execute some custom javascript
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);
}
This does not work. I get a new window every time.
option 5 - Use CreateInstance to run some custom javascript on the page
private void navigationButton_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.CreateInstance("thisIsPlainHell");
}
and in my aspx I have
function thisIsPlainHell() {
var popup = window.open('http://www.bing.com', 'blah');
}
This doesn't work. I get a new window every time.
Am I doing something wrong? I'm definitely no javascript expert, so I'm hoping it's something obvious I'm missing here.
Cheers, Phil