M.S*_*M.S 5 navigation silverlight popup-blocker
我有一个特定的UI元素,点击它时应该导航到另一个URL.我尝试处理鼠标按下事件并执行如下操作:System.Windows.Browser.HtmlPage.Window.Navigate(new Uri("http://google.com"),"_ blank");
但是,除非我禁用弹出窗口拦截器,否则浏览器会阻止它(我尝试使用Chrome和Firefox).我做了一些研究,似乎浏览器阻止了由于用户交互而不会发生的导航,并且就浏览器而言,这个导航是由插件(Silverlight)而不是用户发起的.
好的,有道理.但后来我尝试使用HyperlinkButton而不是阻止它.
我想知道为什么这两种方法从浏览器中得到不同的处理.任何的想法?
我实际上通过使用HyperLinkButton包装导航触发UI来解决这个问题,但我仍然非常好奇......
我将引用一句奇特的公司报价并说“这是一个功能,而不是一个错误”。
Silverlight 团队显然担心安全性。他们不希望像你我这样疯狂的 haxorz 用我们的应用程序做疯狂的事情 - 你知道,比如弹出一堆浏览器窗口,将人们路由到 Zombo.com。想象一下合唱团!赞博!
从他们的文档中总结: 他们希望我们只使用 HyperlinkButton 来超出他们的应用程序。事实上,他们采取了额外的步骤,根据我们的设置,如果我们导航到外部页面,即使是从超链接按钮,他们甚至会抛出 SecurityException。多好。
真正的问题是:为什么是超链接按钮而不是其他东西?
只有一个“东西”可以导航。这为 Microsoft 测试 Silverlight 节省了时间。这一件事可以导航到内部 XAML 页面和外部网页——最好保持一致,并且只有一种导航方式。
它是一个 UIElement。它的后台代码喜欢在主视觉线程中运行。它可以向浏览器保证视觉元素想去某个地方。Microsoft 还可以将其限制逻辑放入需要鼠标单击/键盘输入事件树的控件中。
总而言之,从简单的开始让控件完成工作是有意义的。
好玩的东西!希望这对您有帮助。
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |