2010-06-11 150 views
3

我需要从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. 

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

请指教,谢谢。

回答

2

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

3

不知道这是你所追求的,但试试这个...

在一个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

我碰到这个问题,今天来了,这就是我在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"); 
     } 
用下面的代码创建一个新类
+0

我不明白这是如何解决在OOB方案中的问题。你能描述它如何适用于在OOB中打开浏览器弹出窗口? – RobSiklos 2013-01-18 16:52:39

+0

@RobSiklos好吧,我一定误解了这个问题。我今天的问题是当我试图从SilverLight OOB应用程序打开网页时,我收到了令人生畏的'DOM /脚本桥被禁用'。所以我用我上面发布的来解决这个问题。现在,当我点击一个按钮时,我可以从我的应用代码隐藏的浏览器窗口中打开URL。 – Agilis 2013-01-18 16:57:54