如何从Silverlight Out-of-Browser打开窗口弹出窗口?

时间:2010-06-11 08:18:24

标签: c# silverlight silverlight-4.0 out-of-browser

我需要从Silverlight Out-of-Browser应用程序中打开窗口弹出窗口。

我在Index.html中添加了参数<param name="enablehtmlaccess" value="true" />,但是从后面的代码执行:

HtmlPage.Window.Navigate(new Uri(myUrl), "_blank", myFeatures);

仍会返回错误:

Silverlight OOB Error: The DOM/scripting bridge is disabled.

我读过this帖子,这是否意味着我无法从OOB打开弹出窗口?为什么我需要这样做,因为实际上我已经在WebBrowser内通过ChildWindow控件在OOB Silverlight中显示了HTML页面,但是当我点击链接到_blank页面的HTML页面中的锚点时,它会跳转到我的默认浏览器。它不符合要求,除了首次在默认浏览器中启动HTML索引页面,从OOB Silverlight中的按钮控件触发。这可能吗?

请建议,谢谢。

3 个答案:

答案 0 :(得分:4)

不确定这是不是你想要的,但试试这个......

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

see forums.silverlight.net

答案 1 :(得分:3)

不,这是不可能的。在OOB应用程序中,禁用与HTML桥的任何交互。

答案 2 :(得分:3)

我今天遇到了这个问题,这就是我在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);
    }
} 

以下是如何实施&amp;使用它:

private void hlViewMarketplace_Click(object sender, RoutedEventArgs e)
        {
            Uri destination = new Uri("http:///www.google.com/" + ((HyperlinkButton)sender).CommandParameter);
            WebBrowserBridge.OpenURL(destination, "_blank");
        }