【问题标题】:How to open window pop-up from Silverlight Out-of-Browser?如何从 Silverlight Out-of-Browser 打开窗口弹出窗口?
【发布时间】:2011-03-02 13:31:57
【问题描述】:

我需要从 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 打开弹出窗口?为什么我需要这样做,因为实际上我已经通过 ChildWindow 内的 WebBrowser 控件在 OOB Silverlight 中显示了 HTML 页面,但是当我单击 HTML 页面中链接到 _blank 页面的锚点时,它会跳转到我的默认浏览器.它不满足要求,除了第一次在默认浏览器中启动该 HTML 索引页面,由 OOB Silverlight 中的按钮控制触发。这可能吗?

请指教,谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    在 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案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);
            }
        } 
        

        以下是实现和使用它的方法:

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

        【讨论】:

        • 我看不出这如何解决 OOB 场景中的问题。您能否描述一下它如何应用于在 OOB 中打开浏览器弹出窗口?
        • @RobSiklos 好的,我一定误解了这个问题。我今天的问题是,当我尝试从 SilverLight OOB 应用程序打开网页时,我收到了可怕的“DOM/脚本桥已禁用”。因此,我使用上面发布的内容来解决此问题。现在,当我单击一个按钮时,我可以从我的应用程序的代码隐藏在浏览器窗口中打开 URL。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多