Как открыть всплывающее окно из 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.net

Я столкнулся с этой проблемой сегодня, и вот как я решил ее в 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");
        }
Другие вопросы по тегам