我有一个(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/