我需要从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中的按钮控件触发。这可能吗?
请建议,谢谢。
答案 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");
}
}
答案 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");
}