9

У меня есть приложение, которое использует что-то вроде следующего кода, чтобы открыть динамически сгенерированный отчет на новой вкладке. (Я издевался из параметров для демонстрации.)Форма с target = "_ blank" поведение изменено в IE 9 и 10

function gblPDFWdw(pdf) { 
    var formDiv = document.createElement("div"); 
    formDiv.innerHTML = "<form method=post action='" + pdf + "' target='_blank'><input type=hidden id=test name=test value='test'></form>"; 
    var form = formDiv.firstChild; 
    document.body.appendChild(form); 
    form.submit(); 
    form.parentNode.removeChild(form); 
} 

pdf параметр нам только URL в скрипт, который генерирует PDF. Причиной для манипуляции form является получение параметров POST ed сценарию, а не GET.

В IE 8 и ниже, Chrome, Firefox и т.д., это будет сделать один из двух вещей:

  1. Если браузер может читать PDF-файлы (через встроенные функции или плагин), он будет откройте новую вкладку с отчетом, что является желаемым поведением.
  2. Если браузер не может читать PDF-файлы, он откроет новую вкладку, немедленно закроет ее и загрузит файл.

Кажется, что # 2 изменилось в IE 9 и выше. Он откроет новую вкладку, но она даст только пустой экран, пока пользователь не отправит обратно на исходную вкладку, щелкает «Открыть» или «Сохранить», а затем загружает PDF, как ожидалось. Это очень запутанный интерфейс.

Я полагаю, что одним из способов обойти это было бы создание временного файла PDF, а затем просто window.open(). Существуют ли другие способы настройки поведения этой функции? Или есть рекомендуемая практика, с которой я не сталкивался?

(Примечание: Это не на всех PDF конкретных, любой файл, браузер может загрузить вместо дисплея изначально представляется проблематичным.)

EDIT: Похоже, я дальше перегибают чем я понял. Похоже, что это также происходит в IE9, и я никогда не замечал, поскольку я никогда не пробовал его без установленного плагина PDF или с другим типом файла.

Интересно, что приведенный выше код работает так, как если бы я удалитьinput поле из формы. Я не уверен, почему браузер будет относиться к этому по-другому. Конечно, в моем случае мне нужен ввод данных POST в мой скрипт.

EDIT 2: Глупая ошибка. input - самозакрывающийся. Исправлена.

EDIT 3: Вот несколько скриншотов, чтобы лучше объяснить проблему. Я использую this JSBin для тестирования. У меня есть событие onclick, чтобы запустить функцию Javascript выше.

Процесс начинается с первой вкладки.

First tab, before a click.

Затем, когда вы щелкните текст, откроется новая вкладка. Но это пусто!

Second tab, opened via click.

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

The alert is on the first tab!

Щелчок «Открыть» или «Сохранить» файл будет открыт только штрафом. Но процесс ужасно запутанный и несовместим с другими браузерами.

EDIT 3: Один шаг вперед, один назад. Если я использую window.open(), чтобы создать новое окно, а затем программно установить form.target на имя этого окна, я могу хотя бы получить сообщение «Открыть/Сохранить» на открытой вкладке ... хотя я бы предпочел, чтобы он сразу закрыл вкладку как и другие браузеры. Хуже того, с этой техникой новая вкладка больше не закрывается сразу. Может быть, есть еще одна техника?

+1

Нет закрывающего тега '' для '' - это автономный тег. Вероятно, не работает из-за искаженного HTML. – sbeliv01

+0

@ sbeliv01 Хорошая точка ... глупая ошибка. Но это не изменило проблему. Спасибо хоть! –

+0

Возможно добавление котировок вокруг атрибутов входного тега поможет? '' – sbeliv01

ответ

1

Одним из решений для удаления является обнаружение доступности IE и PDF-плагина, а затем установить атрибут «цель» в «_self» в (> IE9 10!). Я нашел PluginDetect, который утверждает, что модуль плагина AdobeReader обнаружен.

В целом это довольно уродливый и ненадежный метод, но в некоторых случаях должен приводить результат.

+0

Реальная проблема, однако, в том, что это происходит и с файлами Excel. (Возможно, только если Office или какая-то ActiveX вещь не установлена? Пока не сузились.) Спасибо. –

+0

Конечно ... теперь, когда я думаю об этом еще ... Я всегда могу заставить файлы Excel '_self'. Интересно! –

+0

@DavidAlanHjelle: Документация говорит, что Acrobat обнаружен при поиске ActiveX, кажется, что это способ IE, чтобы сделать любое обнаружение плагина. Нашел это ActiveXHelper [http://www.nirsoft.net/utils/axhelper.html] – Bizniztime

 Смежные вопросы

  • Нет связанных вопросов^_^