2011-02-24 46 views
5

我有一个特定的UI元素,点击时应该导航到另一个URL。 我试着处理鼠标按下事件并执行如下操作: System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(“http://google.com”),“_blank”);Browser.HtmlPage.Window.Navigate被阻止,但HyperlinkBut​​ton不是 - 为什么?

但是,这会被浏览器阻止(我试过Chrome和Firefox),除非我禁用弹出窗口阻止程序。 我做了一些研究,似乎浏览器阻止导航不会作为用户交互的结果发生,并且就浏览器而言,此导航由插件(Silverlight)启动,而不是用户启动。

好的,有道理。但后来我尝试使用HyperlinkBut​​ton,而不是被阻止。

我不知道为什么这两种方法从浏览器得到不同的待遇。任何想法?

我居然通过包装导航触发UI与HyperLinkBut​​ton解决问题的工作,但我还是很好奇......

+0

在IE9中,HyperlinkBut​​ton本身有一些问题:http://stackoverflow.com/questions/14678235/silverlight-hyperlinkbutton-not-working-at-all 您需要可以添加'或使用“<!DOCTYPE HTML PUBLIC” - // W3C // DTD HTML 4.0 Transitional // EN“>' – 2013-02-28 06:39:54

回答

4

我要拉一个奇特的企业报价,并说“这是一个功能,而不是一个错误。“

Silverlight团队显然担心安全问题。他们不希望像我和你一样疯狂的haxorz用我们的应用程序做疯狂的事情 - 你知道,就像弹出一大堆浏览器窗口,所有这些都将人员路由到Zombo.com。想象一下合唱团! Zombo!

Summarized from their documentation:他们希望我们只使用HyperlinkBut​​ton来超出他们的应用程序。事实上,他们去了extra step,根据我们的设置,如果我们导航到外部页面,他们甚至会为我们抛出一个SecurityException - 即使是从HyperlinkBut​​ton。多好。

真正的问题:为什么超链接按钮而不是别的?

只有一个“东西”可以导航。这在测试Silverlight时为Microsoft节省了时间。这一件事可以导航到内部XAML页面和外部网页 - 也可以是一致的,只有一种方法可以进行导航。

这是一个UIElement。它背后的代码喜欢在主要的可视化线程中运行。它可以向浏览器承诺一个视觉元素想要去某个地方。微软还可以将其限制逻辑放在需要鼠标点击/键盘输入事件树的控件中。

总而言之,通过让控制工作来简单地开始是有意义的。

有趣的东西!希望这可以帮助你。

+1

合理。我专注于找出浏览器为什么对待这两种导航方法的原因不同,因为我没有考虑过它实际上是SL插件本身对待它们的不同方式。谢谢! – 2011-02-24 18:52:39

+1

获取喜剧介绍+1;) – 2011-12-13 22:28:53

+0

让我看看zombo.com :( – Terry 2012-08-09 12:37:01

相关问题