5

我有一个特定的 UI 元素,单击它时应该导航到另一个 URL。我尝试处理鼠标按下事件并执行如下操作: System.Windows.Browser.HtmlPage.Window.Navigate(new Uri("http://google.com"), "_blank");

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

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

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

我实际上通过使用 HyperLinkBut​​ton 包装导航触发 UI 来解决这个问题,但我仍然很好奇......

4

1 回答 1

4

我将引用一个花哨的公司报价并说“这是一个功能,而不是一个错误”。

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

从他们的文档中总结: 他们希望我们只使用 HyperlinkBut​​ton 去他们的应用程序之外。事实上,他们采取了额外的步骤,根据我们的设置,如果我们导航到外部页面,他们甚至会为我们抛出 SecurityException ——即使是从超链接按钮。多好。

真正的问题:为什么是超链接按钮而不是其他东西?

只有一个“事物”可以导航。这为 Microsoft 在测试 Silverlight 时节省了时间。这一件事可以导航到内部 XAML 页面和外部网页——也可能是一致的,并且只有一种导航方式。

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

总而言之,通过控制来完成工作是有意义的。

好玩的东西!希望这对您有所帮助。

于 2011-02-24T17:21:24.470 回答