Как открыть всплывающее окно из Silverlight Out-of-Browser?
Мне нужно открыть всплывающее окно из приложения Silverlight Out-of-Browser.
Я добавил параметр <param name="enablehtmlaccess" value="true" />
в Index.html, но выполняя это из кода:
HtmlPage.Window.Navigate(new Uri(myUrl), "_blank", myFeatures);
по-прежнему возвращает ошибку:
Silverlight OOB Error: The DOM/scripting bridge is disabled.
Я читал об этом посте, значит ли это, что я не могу открыть всплывающее окно из OOB? Почему мне нужно это сделать, потому что на самом деле я показал HTML-страницу в OOB Silverlight WebBrowser
контроль внутри ChildWindow
но когда я щелкаю ссылку на странице HTML, которая ссылается на _blank, она переходит в браузер по умолчанию. Это не соответствует требованию, за исключением запуска этой HTML-страницы индекса также в браузере по умолчанию в первый раз, вызванной управлением кнопками в OOB Silverlight. Это возможно?
Пожалуйста, совет, спасибо.
3 ответа
Нет, это невозможно. В приложении OOB любое взаимодействие с мостом HTML отключено.
Не уверен, что это то, что вам нужно, но попробуйте это...
В приложении OOB вы можете использовать следующие обходные пути:
Создайте производную кнопку гиперссылки следующим образом:
public class MyHyperlinkButton : HyperlinkButton
{
public void ClickMe()
{
base.OnClick();
}
}
Используйте это для навигации:
private void NavigateToUri(Uri url)
{
if (App.Current.IsRunningOutOfBrowser)
{
MyHyperlinkButton button = new MyHyperlinkButton();
button.NavigateUri = url;
button.TargetName = "_blank";
button.ClickMe();
}
else
{
System.Windows.Browser.HtmlPage.Window.Navigate(url, "_blank");
}
}
Я столкнулся с этой проблемой сегодня, и вот как я решил ее в SilverLight 5: создайте новый класс со следующим кодом:
/// <summary>
/// Opens a new browser window to the specified URL with the specified target
/// For use while running both in or out-of-browser
/// </summary>
public class WebBrowserBridge
{
private class HyperlinkButtonWrapper : HyperlinkButton
{
public void OpenURL(String navigateUri, String target = "_blank")
{
OpenURL(new Uri(navigateUri, UriKind.Absolute), target);
}
public void OpenURL(Uri navigateUri, String target = "_blank")
{
base.NavigateUri = navigateUri;
TargetName = target;
base.OnClick();
}
}
public static void OpenURL(String navigateUri, String target = "_blank")
{
HyperlinkButtonWrapper hlbw = new HyperlinkButtonWrapper();
hlbw.OpenURL(navigateUri, target);
}
public static void OpenURL(Uri navigateUri, String target = "_blank")
{
HyperlinkButtonWrapper hlbw = new HyperlinkButtonWrapper();
hlbw.OpenURL(navigateUri, target);
}
}
Вот как это можно реализовать и использовать:
private void hlViewMarketplace_Click(object sender, RoutedEventArgs e)
{
Uri destination = new Uri("http:///www.google.com/" + ((HyperlinkButton)sender).CommandParameter);
WebBrowserBridge.OpenURL(destination, "_blank");
}