Открытая URI ссылка Silverlight блокируется браузером - PullRequest
4 голосов
/ 11 мая 2011

Проблема проста, но раздражает.У меня есть кнопка, и событие щелчка открывает ссылку на

HtmlPage.Window.Navigate(uri, "_blank");

, но браузер продолжает блокировать ее.Я много искал.Кажется, все используют этот метод, но никто не упомянул, что новая вкладка / окна блокируется.Так что мне делать?

ОБНОВЛЕНИЕ

Проблема решена.Похоже, что для перехода на внешние веб-страницы следует использовать HyperlinkButton.Это не блокируется браузером.

"Чтобы разрешить навигацию пользователя по другим веб-страницам, вы можете использовать элемент управления HyperlinkButton, установить для свойства NavigateUri внешний ресурс и установить свойство TargetName для открытия нового окна браузера«.--- MSDN, Silverlight - Внешняя навигация

<HyperlinkButton NavigateUri="http://www.microsoft.com" Content="Go to Microsoft" TargetName="_blank" />

PS.HtmlPage.PopupWindow также блокируется браузером.Мне кажется, что HtmlPage.Window.Navigate и HtmlPage.PopupWindow бесполезны, если пользователь не отключит блок вручную.

Ответы [ 3 ]

1 голос
/ 17 февраля 2013

Вы можете использовать System.Windows.Browser. HtmlPage.Window.Eval следующим образом:

    HtmlPage.Window.Eval("mywindowopener('http://www.google.com'")

для вызова функции JavaScript «mywindowopener» и передачи URL. Тогда в вашем Javascript:

    function mywindowopener(uri) {
        window.loginDialog = window.open(uri, "popupwindow", 
        "height=320,width=480,location=no,menubar=no,toolbar=no");
    }

«HtmlPage.Window.Eval» будет обходить блокировщик всплывающих окон, тогда как «HtmlPage.Window.Invoke (mywindowopener, url)» или «HtmlPage.PopupWindow» не будет.

1 голос
/ 11 мая 2011

Рассматривали ли вы System.Windows.Browser.HtmlPage.PopupWindow(uri, "_blank", null) в Silverlight 3 и 4?

Вместо последнего значения NULL вы также можете установить набор параметров с помощью HtmlPopupWindowOptions

0 голосов
/ 28 февраля 2013

Код Silverlight:

    public static void OpenWindow(string url, WindowTarget target = WindowTarget._blank)
    {
        // This will be blocked by the pop-up blocker in some browsers
        // HtmlPage.Window.Navigate(new Uri(url), target.ToString());

        // Workaround: use a HyperlinkButton, but do make sure for IE9, you need to have
        //   <meta http-equiv="x-ua-compatible" content="IE=8" />
        // and for all browsers, in the Silverlight control: 
        //   <param name="enableNavigation" value="true" />
        // Also, it seems the workaround only works in a user-triggered event handler
        //
        // References:
        //   1. /121439/otpravka-schelchka-myshi-na-knopku-v-silverlight-2
        //   2. http://stackoverflow.com/questions/14678235/silverlight-hyperlinkbutton-not-working-at-all
        HyperlinkButton hb = new HyperlinkButton()
        {
            NavigateUri = new Uri(url),
            TargetName  = target.ToString()
        };
        (new HyperlinkButtonAutomationPeer(hb) as IInvokeProvider).Invoke();
    }

HTML-страница, содержащая элемент управления Siverlight:

<!--
http://stackoverflow.com/tags/x-ua-compatible/info
X-UA-Compatible is a IE-specific header that can be used to tell modern IE versions to
use a specific IE engine to render the page. For example, you can make IE8 use IE7 mode
or tell IE to use the newest available rendering engine.
-->
    <meta http-equiv="x-ua-compatible" content="IE=8" />

<!-- If we don't have the the above meta tag, Silverlight HyperlinkButton won't work in IE9
     Some Security issue (Unathorized access exception)

TODO:
  1. Check if IE10 has the same issue or not;
  2. Test this in IE7 or IE6.
-->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...