2010-06-11 3 views
3

Je dois ouvrir une fenêtre contextuelle à partir de l'application Silverlight Out-of-Browser.Comment ouvrir la fenêtre pop-up de Silverlight Out-of-Browser?

J'ai ajouté <param name="enablehtmlaccess" value="true" /> paramètre dans index.html, mais l'exécution de ce code derrière de:

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

retourne encore erreur:

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

J'ai lu this après, est-ce signifie que je ne peux pas ouvrir pop-up de OOB? Pourquoi je dois faire cela, parce que j'ai montré la page HTML dans OOB Silverlight par WebBrowser contrôle dans ChildWindow mais quand je clique sur une ancre dans la page HTML, qui a lié à la page _blank, il saute à mon navigateur par défaut. Il ne répond pas à l'exigence, sauf le lancement de cette page d'index HTML également dans le navigateur par défaut à la première fois, déclenché à partir du contrôle de bouton dans OOB Silverlight. Est-ce possible?

S'il vous plaît, merci.

Répondre

2

Non, ce n'est pas possible. Dans une application OOB, toute interaction avec le pont HTML est désactivée.

3

ne sais pas si c'est ce que vous recherchez, mais essayez ceci ...

Dans une application OOB, vous pouvez utiliser les travaux suivants autour de:

bouton Créer un lien hypertexte dérivé comme ceci:

public class MyHyperlinkButton : HyperlinkButton 
{ 
     public void ClickMe() 
     { 
       base.OnClick(); 
     } 
} 

utilisation que pour la navigation:

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

Je suis tombé sur ce problème aujourd'hui et voici comment je l'ai résolu dans SilverLight 5: Créer une nouvelle classe avec le code suivant:

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

Voici comment à la fois mettre en œuvre & utiliser:

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

Je ne vois pas comment cela résout le problème dans un scénario OOB. Pouvez-vous décrire comment cela s'applique à l'ouverture de popups de navigateur dans OOB? – RobSiklos

+0

@RobSiklos D'accord, je dois avoir mal compris la question. Mon problème aujourd'hui était lorsque j'ai essayé d'ouvrir une page Web à partir de mon application SilverLight OOB, j'ai reçu le redouté «Le pont DOM/scripting est désactivé». J'ai donc utilisé ce que j'ai posté ci-dessus pour contourner ce problème. Maintenant, quand je clique sur un bouton, je suis en mesure d'ouvrir l'URL dans une fenêtre de navigateur à partir du code-behind de mon application. – Agilis

Questions connexes