Silverlight 2 - Скачать файл - IE Blocks скачать файл - PullRequest
1 голос
/ 01 апреля 2009

У меня проблема с IE только в моем приложении Silverlight. Поскольку Silverlight 2 не включает механизм загрузки файлов, я был предоставлен собственным устройствам, чтобы найти решение. Я сделал это следующим образом:

HtmlPage.Window.Navigate (новый Uri (sb.ToString (), UriKind.Relative));

My StringBuilder содержит относительный URL со строкой запроса для обработчика * .ashx на сервере, который считывает строку запроса, получает некоторые данные из базы данных и возвращает файл Excel.

Когда я делаю это, я получаю заблокированную панель загрузки файлов только в IE. Я понимаю, что это новая «функция» безопасности в IE, и она блокируется, поскольку считает, что загрузка не была инициирована взаимодействием пользователя с веб-страницей. Пользователи могут разрешить загрузку, и эта настройка запоминается до конца сеанса. Однако в следующий раз, когда они открывают страницу, это происходит снова. Даже если сайт находится в доверенной зоне, и даже если блокировщик всплывающих окон настроен на разрешение всплывающих окон для сайта.

Кто-нибудь знает, как заставить IE узнать, что пользователь действительно запрашивал этот файл?

Ответы [ 4 ]

2 голосов
/ 22 июня 2009

У меня была точно такая же проблема. Для меня решение было не использовать HtmlPage.Window.Navigate, а вместо этого использовать HyperlinkButton и динамически устанавливать свойство NavigateUri.

Сохранение и восстановление состояния приложения, как указано выше, не сработало. Что ж, это так, но было невозможно определить, когда это нужно сделать, а когда нет. Так что, в конце концов, это не сработало.

Смотрите это обсуждение на codeplex ....

http://slideshow2.codeplex.com/Thread/View.aspx?ThreadId=60242

1 голос
/ 30 октября 2012

Это мой код для открытия URL-адреса для загрузки и переопределения Автоматическое уведомление о загрузке файлов проблема с опцией в IE 8.

Также используется HyperlinkButton , но все вызывается из кода:

public class BrowserHelper
{
    private sealed class HyperlinkButtonCaller : HyperlinkButton
    {
        public static void OpenUrl(Uri url)
        {
            var button = new HyperlinkButtonCaller()
            {
                NavigateUri = url
            };

            button.OnClick();
        }
    }

    public static void OpenUrl(Uri url)
    {
        if (url == null)
        {
            throw new ArgumentNullException("url");
        }

        HyperlinkButtonCaller.OpenUrl(url);
    }
}

BrowserHelper.OpenUrl(new Uri(ClientGlobalInfo.Current.ApplicationUrl, "myhandler.ashx"));
1 голос
/ 10 марта 2011

Попробуйте HtmlPage.PopupWindow вместо HtmlPage.Window.Navigate. Это помогло мне обойти настройку IE «Автоматический запрос загрузки файлов», отключенную по умолчанию для сайтов зоны Интернета.

0 голосов
/ 01 апреля 2009

В моем случае это происходит только в первый раз (с использованием IE 7), может быть, это происходит в вашем локальном экземпляре dev?

Я думаю, что вы мало что можете сделать, даже страницы MSDN сообщают вам, что "сообщение появится поверх ...", что может смягчить это:

  • Предупредить пользователя о том, что сообщение будет показано, а затем, как только он щелкнет, приложение будет сброшено (сохраните текущее состояние приложения в изолированном хранилище, когда вы получите сброс, перезагрузите приложение с настройками). *

  • Откройте всплывающее окно, и во всплывающем окне включите и стандартную кнопку HTML для загрузки.

НТН Braulio

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...