我有一个(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和不要射击Messenger IE11。前两个很好,但是后一个...

由于IE不支持navigator.clipboard,因此我在其中安装了if (is_ie),效果很好。但是,IE不了解非IE部分中的Promise,并在以下地方抱怨“无效语法”:

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

即使它永远不会真正运行它。

如何告诉IE忽略该部分代码,或者解决此问题?我看过有条件地基于浏览器加载一个单独的JS文件,但这看起来并不有趣。有更好的选择吗?

最佳答案

根据OP的建议添加我的评论作为答案。

您可以尝试使用eval()解决此问题。 eval()的作用是将字符串解析为可执行代码。从字面上看,这将使IE忽略此代码,因为它无论如何都不会执行。

是的,我们通常不使用eval(),但是像这样的罕见情况是使用它的完美理由。

以下是有关评估的一些资源:Why is using the JavaScript eval function a bad idea?

或者,如果可能的话,只需使用Promise填充。



正如@Quentin解释的那样,仅使用函数表达式即可轻松解决此问题,而无需使用eval()

关于javascript - 忽略IE11中的“语法错误”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55647350/

10-16 09:18