Browser.HtmlPage.Window.Navigate заблокирован, но HyperlinkButton нет - почему? - PullRequest
5 голосов
/ 24 февраля 2011

У меня есть определенный элемент пользовательского интерфейса, который при нажатии должен перейти на другой URL. Я попытался обработать событие мыши и выполнить что-то вроде этого: System.Windows.Browser.HtmlPage.Window.Navigate (новый Uri ("http://google.com")," _blank ");

Однако это блокируется браузером (я пробовал и Chrome, и Firefox), если я не отключил блокировщик всплывающих окон. Я провел некоторое исследование, и кажется, что браузер блокирует навигацию, которая не происходит в результате взаимодействия с пользователем, и что касается браузера, эта навигация инициируется плагином (Silverlight), а не пользователем.

ОК, имеет смысл. Но затем я попытался использовать HyperlinkButton, и он НЕ был заблокирован.

Интересно, почему эти два подхода обрабатываются браузером по-разному? Есть идеи?

На самом деле я решил эту проблему, обернув пользовательский интерфейс навигации с помощью HyperLinkButton, но мне все еще очень любопытно ...

1 Ответ

4 голосов
/ 24 февраля 2011

Я собираюсь выдвинуть необычную корпоративную цитату и сказать: «Это особенность, а не ошибка».

Команда Silverlight, очевидно, беспокоится о безопасности.Они не хотят, чтобы сумасшедший хакшор, как вы и я, делал с нашими приложениями какие-то сумасшедшие вещи - вы знаете, как всплывающие окна браузера, все перенаправляющие людей на Zombo.com.Представьте себе хор! Zombo!

Суммировано из их документации: Они хотят, чтобы мы использовали только HyperlinkButton, чтобы выйти за пределы их приложения.Фактически, они пошли на дополнительный шаг , и, в зависимости от наших настроек, они даже сгенерируют для нас исключение SecurityException, если мы перейдем на внешнюю страницу - даже из HyperlinkButton.Как хорошо.

Реальный вопрос: почему кнопка гиперссылки, а не что-то еще?

Только одна «вещь» может перемещаться.Это экономит время Microsoft при тестировании Silverlight.Это одна вещь, которая может перемещаться как на внутренние страницы XAML, так и на внешние веб-страницы - она ​​также может быть последовательной и иметь только один способ навигации.

Это элемент UIElement.Это код, который любит запускать в основном визуальном потоке.Он может пообещать браузеру, что визуальный элемент хочет куда-то пойти.Microsoft также может поместить свою ограничивающую логику в элемент управления, который требует дерева событий щелчка мышью / ввода с клавиатуры.

В общем, имеет смысл начать с простого, заставив работать элемент управления.

Прикольные вещи!Надеюсь, это поможет вам.

...