Как открыть всплывающее окно из Silverlight Out-of-Browser? - PullRequest
3 голосов
/ 11 июня 2010

Мне нужно открыть всплывающее окно из приложения 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 ]

4 голосов
/ 23 августа 2011

не уверен, что это то, что вам нужно, но попробуйте это ...

В приложении OOB вы можете использовать следующую работу:

Создайте кнопку производной гиперссылки, напримерthis:

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"); 
        } 
}

см. forum.silverlight.net

3 голосов
/ 18 января 2013

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

Нет, это невозможно.В приложении OOB любое взаимодействие с мостом HTML отключено.

...