dispatchEvent не работает в javascript с Inte rnet explorer 11 - PullRequest
0 голосов
/ 28 мая 2020

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

Я пытаюсь использовать фрагмент кода, показанный в этом сообщении:

[ Использование HTML5 / JavaScript для создания и сохранения файла

А если быть точным:

function download(filename, text) {
    var pom = document.createElement('a');
    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
    pom.setAttribute('download', filename);

    if (document.createEvent) {
        var event = document.createEvent('MouseEvents');
        event.initEvent('click', true, true);
        pom.dispatchEvent(event);
    }
    else {
        pom.click();
    }
}

Это отлично работает для Firefox и Chrome. Однако с Inte rnet Explorer 11 это не работает. Когда эта инструкция выполняется ...

pom.dispatchEvent(event);

... ничего не происходит. Диалог сохранения не открывается, и в консоли java браузера не отображается ошибка. Событие словно теряется в пустоте. Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 28 мая 2020

Ваш код отлично работает в Inte rnet Explorer 11.836.18362.0, однако с учетом сказанного MDN советует не использовать технику, которую вы используете. createEvent и initEvent являются устаревшими, могут иметь непредсказуемые результаты и могут быть отброшены в любое время. Вместо этого используйте Event(). См. initEvent и createEvent MDN do c стр.

0 голосов
/ 29 мая 2020

Я попытался проверить проблему на своей стороне и вижу, что файл не загружается в браузере IE 11.

Ниже приведен измененный код, который вы можете использовать для IE и другие браузеры. Он загрузит файл правильно.

<!doctype html>
<html>
<head>
<script>
function download(data, filename, type) 
{
    var file = new Blob([data], {type: type});
    if (window.navigator.msSaveOrOpenBlob) 
    {
        window.navigator.msSaveOrOpenBlob(file, filename);
    }
    else 
    {   var pom = document.createElement('a');
        pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(data));
        pom.setAttribute('download', filename);

        if (document.createEvent) 
        {
            var event = document.createEvent('MouseEvents');
            event.initEvent('click', true, true);
            pom.dispatchEvent(event);
        }
        else 
        {
            pom.click();
        }
    }
}
download('Hello world!','test.txt','text/plain');
</script>
</head>
<body>
<h2>Refresh the page</h2>
</body>
</html>

Вывод в браузере IE 11:

enter image description here

0 голосов
/ 28 мая 2020

Это широко поддерживается в современных браузерах. Однако

Более старые версии IE поддерживали эквивалентный проприетарный метод EventTarget.fireEvent ().

Источник: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent

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