3

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

请指教,谢谢。

4

3 回答 3

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

请参阅 forums.silverlight.net

于 2011-08-23T01:23:31.187 回答
3

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

于 2010-06-11T10:05:58.757 回答
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");
        }
于 2013-01-18T16:32:27.887 回答