Игнорирование «синтаксических ошибок» в IE11 - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть приложение (ASP.Net), которое имеет следующий клиентский Javascript для облегчения копирования в буфер обмена:

var ua = window.navigator.userAgent;
var is_ie = /MSIE|Trident/.test(ua);

if (is_ie) {
    var input = document.getElementById("inputcopy"); // select it

    input.value = text;
    input.select();
    document.execCommand("copy");
    this.focus();
}
else {     
    navigator.clipboard.writeText(text).then(() => {
        writeLog('Copy successful');
        if (showalert == true) alert('Copied to clipboard');
    }).catch(() => {
        writeLog('Copy failed');
        if (showalert == true) alert('Copy to clipboard failed');
    });           
}   

Мы должны быть совместимы со всеми «современными» браузерами - Chrome,Firefox и не стреляйте в мессенджера, IE11.Первые два хороши, но последние ...

Поскольку IE не поддерживает navigator.clipboard, у меня есть if (is_ie), что прекрасно работает.Однако IE не знает о Promise в разделе, отличном от IE, и жутко жалуется на «Неверный синтаксис» на

navigator.clipboard.writeText(text).then(() => {

, хотя на самом деле он никогда не будетзапустите его.

Как я могу сказать IE игнорировать этот бит кода или обойти эту проблему?Я смотрел на условную загрузку отдельного файла JS на основе браузера, но это не выглядит большим удовольствием.Есть ли лучший вариант?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Нельзя заставить синтаксический анализатор JavaScript пропускать синтаксис в тех частях программы, которые он не собирается запускать (чтобы ужасно упростить ситуацию: ему все еще нужно проанализировать этот бит программы, чтобы найти }, который заканчивает блок else.

Либо напишите свой JS, чтобы использовать синтаксис, который поддерживается IE (т.е. используйте выражение функции вместо функции стрелки), либо перенесите свой JS в версию, которую IE будет поддерживать (с помощью инструмента, такого как Babel).

0 голосов
/ 12 апреля 2019

Добавление моего комментария в качестве ответа по предложению ОП.

Вы можете попробовать eval (), чтобы обойти эту проблему. eval() выполняет синтаксический анализ строки в исполняемый код. Это буквально заставит IE игнорировать этот код, так как он все равно не будет выполняться.

Да, мы обычно не используем eval(), но такие редкие сценарии являются отличными причинами для его использования.

Вот некоторый ресурс о eval: Почему использование функции eval в JavaScript - плохая идея?

Или, если возможно, просто используйте обещание polyfill.


Как объяснил @Quentin, простое использование выражения функции должно легко исправить это без использования eval().

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