Xpoint
   [напомнить пароль]

Запрет открытия не-HTML-файла в браузере без участия сервера

Метки: [без меток]
2008-09-02 20:25:55 [обр] Илья Cтpeльцын aka SelenIT(0/171)[досье]

В общем, ситуация тупа до безобразия: есть внутрикорпоративный портал, с которого можно по прямой ссылке скачивать вордовские и еще какие-то файлы (самые что ни на есть статические). Проблема в следующем: у некоторых юзеров ворд интегрирован с браузером (на мой взгляд, дикость несусветная — не могу понять, кому и зачем вообще такое может быть нужно?), и потому этот файл норовит открыться в текущем окне, а текущее окно — это малюсенький фрейм со ссылками :). Приходится ставить target="_blank", но это вспыхивающее на время загрузки белое окошко (в IE7) и вырастающий после серии загрузок частокол пустых табов в FF/Опере дико раздражают меня — и, как я предполагаю, всех нормальных юзеров (т.е. тех, чьи браузеры не вступают в противоестественные и опасные связи с другими программами:). Понадеялся было на атрибут type ссылки, попробовал загнать туда application/octet-stream — облом, зараза-IE, по-видимому, определяет тип файла по расширению (Опера, кажется, тоже, но она "лучше воспитана" — не тянет в себя что попало, поэтому беспокоит меня главным образом IE...).

Конечно, будь у меня полный доступ к серверному бэкенду — можно было бы накидать отдачу этих файлов скриптом с набором заголовков для принудительного скачивания, и оставить назойливые "внедренные ворды" с носом. Но такого доступа у меня нет. Неужели нет способа запретить открытие файла в браузере силами клиентской стороны (малоизвестных атрибутов HTML, какой-нибудь яваскриптовой "глушилки" ActiveX-ов или чего-нибудь подобного)?

Или, может быть, я чего-то важного не понимаю и все эти внедренные прямо в браузер ворды/эксели/акробаты — вовсе не раздражающее "абсолютное зло", а реальная польза? И решение с target="_blank" для этого случая (маленький фрейм) — действительно оптимальный компромисс?..

Заранее спасибо!

спустя 35 минут [обр] Давид Мзареулян(9/1003)[досье]

Пройтись по всем отделам и выдрать ворд из браузера.

Больше никак.

спустя 39 секунд [обр] Давид Мзареулян(9/1003)[досье]
Ещё в архивах можно файлы выкладывать. Это если лень делать п. 1.
спустя 1 час 5 минут [обр] Алексей Севрюков(0/1280)[досье]

Илья Cтpeльцын aka SelenIT[досье] Если у Вас Apache, попробуйте:

<FilesMatch "\.doc$">
Header set Content-Disposition attachment
</FilesMatch>

Насколько я помню я решал именно ту проблему, что Вы описали и ее решил (правда для xls и pdf). Только не помню, этим путем или нет. Кстати, туда же можно на всякий пожарный загнать строчку:

Header set Content-Type application/octet-stream

для остальных браузеров.

спустя 12 часов [обр] GRAy(0/259)[досье]

Алексей Севрюков[досье] Он же пишет

Конечно, будь у меня полный доступ к серверному бэкенду — можно было бы накидать отдачу этих файлов скриптом с набором заголовков для принудительного скачивания,

:)

спустя 19 минут [обр] Алексей Севрюков(0/1280)[досье]
Каюсь, просмотрел... Тогда никак.
спустя 20 минут [обр] Илья Cтpeльцын aka SelenIT(0/171)[досье]

Давид Мзареулян[досье], Алексей Севрюков[досье], GRAy[досье], спасибо!

К сожалению, выдрать ворд из браузеров не получается — люди привыкли к возможности "быстренько посмотреть файл, не скачивая его на локалку" и ни за что не хотят отказываться от этого.

А мне еще одна мысль пришла: можно ли яваскриптом определить наличие внедренного ворда (насколько я понимаю, нужно проверять специфический актив-икс или какой-то их класс?) и только в этом случае открывать для ссылок, оканчивающихся на .doc/.docx, новое окно?

спустя 2 часа 23 минуты [обр] GRAy(0/259)[досье]

Илья Cтpeльцын aka SelenIT[досье] Можно попробовать сделать что-то типа:

try {
var aa = new ActiveXObject("<ProgID>");
  // открываем
} catch (e) {
 // не открываем окно.
}

Где <ProgID> можно попытаться выяснить в реестре на машине где есть внедрённый ворд.
Чтобы это сделать зайдите в свойства обозревателя (меню сервис), вкладка программы, кнопка надстройки. Там где-то будет нужный вам ActiveX, а по его имени в реестре можно найти ProgID. Лучше брать VersionIdependantProgID - понятно почему.

спустя 1 час 14 минут [обр] Thirteensmay(0/157)[досье]
Ну не факт что открытие всегда происходит через какой нить особый ActiveX, например для IE6. Вообще вордовый ActiveX есть всегда когда есть ворд. Тут надо смотреть ассоциации файлов и связанные с ними действия, предположительно в реестре. Ну а совсем вообще решение с target="_blank" думаю вполне оптимальный компромисс, ибо стабильно в отличии от всяких ActiveX, версий браузера и операционки. Окошки конечно надо после себя закрывать, это нормально.
Powered by POEM™ Engine Copyright © 2002-2005