У меня есть приложение, которое использует что-то вроде следующего кода, чтобы открыть динамически сгенерированный отчет на новой вкладке. (Я издевался из параметров для демонстрации.)Форма с 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 и т.д., это будет сделать один из двух вещей:
- Если браузер может читать PDF-файлы (через встроенные функции или плагин), он будет откройте новую вкладку с отчетом, что является желаемым поведением.
- Если браузер не может читать PDF-файлы, он откроет новую вкладку, немедленно закроет ее и загрузит файл.
Кажется, что # 2 изменилось в IE 9 и выше. Он откроет новую вкладку, но она даст только пустой экран, пока пользователь не отправит обратно на исходную вкладку, щелкает «Открыть» или «Сохранить», а затем загружает PDF, как ожидалось. Это очень запутанный интерфейс.
Я полагаю, что одним из способов обойти это было бы создание временного файла PDF, а затем просто window.open(). Существуют ли другие способы настройки поведения этой функции? Или есть рекомендуемая практика, с которой я не сталкивался?
(Примечание: Это не на всех PDF конкретных, любой файл, браузер может загрузить вместо дисплея изначально представляется проблематичным.)
EDIT: Похоже, я дальше перегибают чем я понял. Похоже, что это также происходит в IE9, и я никогда не замечал, поскольку я никогда не пробовал его без установленного плагина PDF или с другим типом файла.
Интересно, что приведенный выше код работает так, как если бы я удалитьinput
поле из формы. Я не уверен, почему браузер будет относиться к этому по-другому. Конечно, в моем случае мне нужен ввод данных POST
в мой скрипт.
EDIT 2: Глупая ошибка. input
- самозакрывающийся. Исправлена.
EDIT 3: Вот несколько скриншотов, чтобы лучше объяснить проблему. Я использую this JSBin для тестирования. У меня есть событие onclick, чтобы запустить функцию Javascript выше.
Процесс начинается с первой вкладки.
Затем, когда вы щелкните текст, откроется новая вкладка. Но это пусто!
И получается, что вкладка оригинальной (теперь скрыты) имеет сообщение с запросом, следует ли открыть или сохранить файл.
Щелчок «Открыть» или «Сохранить» файл будет открыт только штрафом. Но процесс ужасно запутанный и несовместим с другими браузерами.
EDIT 3: Один шаг вперед, один назад. Если я использую window.open()
, чтобы создать новое окно, а затем программно установить form.target
на имя этого окна, я могу хотя бы получить сообщение «Открыть/Сохранить» на открытой вкладке ... хотя я бы предпочел, чтобы он сразу закрыл вкладку как и другие браузеры. Хуже того, с этой техникой новая вкладка больше не закрывается сразу. Может быть, есть еще одна техника?
Нет закрывающего тега '' для '' - это автономный тег. Вероятно, не работает из-за искаженного HTML. – sbeliv01
@ sbeliv01 Хорошая точка ... глупая ошибка. Но это не изменило проблему. Спасибо хоть! –
Возможно добавление котировок вокруг атрибутов входного тега поможет? '' – sbeliv01