Я хочу использовать внешнее окно браузера для реализации функции предварительного просмотра в приложении silverlight. Существует список элементов, и всякий раз, когда пользователь щелкает один из этих элементов, он открывается в отдельном окне браузера (содержимое представляет собой документ PDF, поэтому он обрабатывается отдельно от приложения SL).
Теперь, чтобы достичь этого, я просто использую
HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "_blank");
, который отлично работает.
Теперь моему клиенту не нравится тот факт, что каждый клик открывает новое окно браузера. Он хотел бы, чтобы окно браузера использовалось каждый раз при нажатии на элемент. Поэтому я вышел и попытался реализовать это:
Опция 1 - использовать перегрузку метода Navigate, например, так:
HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "foo");
Я предполагал, что окно будет использоваться повторно, когда в последующих вызовах будет использоваться то же значение целевого параметра (foo).
Это не работает. Я получаю новое окно каждый раз.
Опция 2 - использовать метод PopupWindow в HtmlPage
HtmlPage.PopupWindow(new Uri("http://www.bing.com"), "blah", new HtmlPopupWindowOptions());
Это не работает. Я получаю новое окно каждый раз.
Вариант 3 - Получить дескриптор открывшегося окна и повторно использовать его при последующих вызовах
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");
}
Это не работает. Я попробовал то же самое для метода PopupWindow (), и окно каждый раз равно null, поэтому при каждом щелчке открывается новое окно. Я проверил оба свойства EnableHtmlAccess и IsPopupWindowAllowed, и они возвращают true, , как они должны .
Опция 4 - Используйте метод Eval для выполнения некоторого пользовательского 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);
}
Это не работает. Я получаю новое окно каждый раз.
опция 5 - Используйте CreateInstance для запуска некоторого пользовательского JavaScript на странице
private void navigationButton_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.CreateInstance("thisIsPlainHell");
}
и у меня в aspx
function thisIsPlainHell() {
var popup = window.open('http://www.bing.com', 'blah');
}
Это не работает. Я получаю новое окно каждый раз.
Я что-то не так делаю? Я определенно не эксперт по javascript, так что я надеюсь, что это что-то очевидное, что мне здесь не хватает.
Ура,
Фил