Документ Word, загруженный с помощью window.open, не открывается (IE7 / IE8) - PullRequest
2 голосов
/ 09 июля 2010

У нас проблема с получением документов Word для загрузки в IE7 / IE8 с помощью вызовов window.open.Эта проблема в настоящее время возникает только в нашей производственной среде с включенным SSL - наша тестовая среда работает правильно, но НЕ включает SSL.Обе среды работают под управлением IIS6 и используют встроенную аутентификацию.

Javascript довольно прост:

    function OpenNewWindow(sURL, sName, sHeight, sWidth)
{
    var sFeatures = "top=40,left=190,toolbar=no,location=no,directories=no,menubar=no,scrollbars=yes,resizable=yes,status=no";
    sFeatures = "width=" + sWidth + ",height=" + sHeight + "," + sFeatures;

    var newWindow = window.open(sURL, sName, sFeatures);
    newWindow.focus();
}

Переданной функции передаются относительные пути и сама страница (страница ASP.NET) предварительно отформатирован HTML.Основным кодом для страницы является установка типа содержимого «application / msword» и позволяет ASP.NET записывать содержимое страницы в выходной поток.

Когда вызывается вышеуказанная функция, новаяокно создается, а затем сразу же закрывается без каких-либо ошибок или подсказок.Насколько я могу судить (с помощью Fiddler), кэширование включено, а сжатие HTTP НЕ включено.Фактическое содержимое документа возвращается, но между IE и Word, похоже, есть какое-то разъединение.

Странность, которую я заметил, заключается в том, что в тесте возникает проблема согласования, и на нее отвечает Kerberos.Билет во время производства не вызывает / ответ не возникает (хотя один из них происходит на начальной странице, и ответ NTLM).Кроме того, прямая ссылка на соответствующую страницу (документ Word) ДЕЙСТВИТЕЛЬНО работает в обеих средах.Наконец, снятие флажка «Подтверждение открытия после загрузки» для типа файла .DOC позволяет успешно открыть документ (но НЕ является решением, которое мы готовы использовать для сотрудников 2000+).

Я знаю этоЭто ограниченная информация, и мне может понадобиться добавить больше деталей, но я потратил большую часть дня на поиск / тестирование и не чувствую себя ближе к решению этой проблемы.Любая помощь будет принята с благодарностью!

Заголовки для обеих сред:

Запрос TEST (работает правильно, без SSL) GET /webapps/gfcse/CSEPrint.aspx?mode=ReadOnly&sSurveyId=3060 HTTP / 1.1Принимаем: / Accept-Language: en-usUA-CPU: x86Accept-Encoding: gzip, выкачатьUser-Agent: Mozilla / 4.0 (совместимо; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)Host: pc55516svmaПодключение: Keep-AliveCookie: ASP.NET_SessionId = elto5pakakvepbju42w24eefАвторизация: переговоры [snip]

TEST response HTTP / 1.1 200 ОКCache-Control: приватныйКонтент-длина: 26458Тип контента: приложение / msword;кодировка = UTF-8Сервер: Microsoft-IIS / 6.0X-Powered-By: ASP.NETMicrosoftSharePointTeamServices: 12.0.0.6421WWW-Аутентификация: переговоры [snip]X-AspNet-версия: 2.0.50727Дата: чт, 08 июля 2010 15:14:26 GMT[содержание документа]

Запрос ПРОИЗВОДСТВА (НЕ работает, SSL включен) GET /gfcse/CSEPrint.aspx?mode=ReadOnly&sSurveyId=3582 HTTP / 1.1Принимаем: / Accept-Language: en-usUA-CPU: x86Accept-Encoding: gzip, выкачатьUser-Agent: Mozilla / 4.0 (совместимо; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)Хост: intranet.gfnet.comПодключение: Keep-AliveCookie: ASP.NET_SessionId = h2xw0ebweb4e2455iab1tvbf

ПРОИЗВОДСТВЕННЫЙ ответ HTTP / 1.1 200 ОКCache-Control: приватныйКонтент-длина: 26438Тип контента: приложение / msword;кодировка = UTF-8Сервер: Microsoft-IIS / 6.0MicrosoftSharePointTeamServices: 12.0.0.6219X-Powered-By: ASP.NETX-AspNet-версия: 2.0.50727Дата: четверг, 08 июля 2010 г. 15:07:41 GMT[содержание документа]

Ответы [ 3 ]

4 голосов
/ 14 июля 2010

Проблема, как выясняется, не имеет ничего общего с заголовками, а скорее с тем, что мы пытались сделать с помощью javascript - автоматической загрузки файлов.

Поскольку наши тестовые и производственные среды находятся в разных зонах безопасности, на загрузку файлов влияли разные параметры (в частности, «автоматическое уведомление о загрузке файлов»). Поскольку мы пытались загружать файлы с помощью javascript в зоне, в которой была включена информационная панель, браузер делал то, что должен. Есть несколько различных способов решения этой проблемы (например, групповая политика, downloa

Аналогичная проблема решается в этой теме: Проблема IE7 - не удается загрузить потоковый файл, когда автоматическая подсказка для загрузки файлов отключена

0 голосов
/ 09 июля 2010

Вы можете использовать System.Web.HttpResponse для принудительной загрузки файлов из браузера пользователя.

Protected Sub btnDownloadMe_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDownloadMe.Click



    Dim filename As String = "demo.docx"

    'For old version of MS Word use application/msword

    Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
    Response.AddHeader("Content-Disposition", String.Format("attachment;filename={0}", filename))
    Response.[End]()


End Sub
0 голосов
/ 09 июля 2010

Я думаю, вы обнаружите, что на самом деле это не проблема, связанная с javascript, а скорее проблема с заголовками IE и HTTP.У нас была похожая проблема при попытке открыть csv-файлы, различные комбинации заголовков будут работать правильно, другие не будут. Я не могу вспомнить, какие из них нужны, это то, что нам пришлось установить

, обратите внимание, что это в php, но выдолжен быть в состоянии перевести на .net

setHeader("Expires", gmdate("D, d M Y H:i:s") . " GMT")
setHeader("Last-Modified",  gmdate("D, d M Y H:i:s") . " GMT")
setHeader("Cache-Control", "", true)
setHeader('Content-Disposition', 'attachment; filename=' . $filenameToReturn)
setHeader('Content-type', 'application/octet-stream')
setHeader("Content-length", sprintf('%d', filesize($this->view->filename)));

Теперь, когда я думаю о проблемах с заголовком Cache-Control, он должен быть пустым

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