我有一个(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文件,但这看起来并不有趣。有更好的选择吗?
答案 0 :(得分:1)
您无法使JavaScript解析器跳过将不会运行的程序部分的语法(要彻底简化这种情况:它仍然需要解析程序的那一部分才能找到{{1} } $transaction->to->name;
$transaction->from->name;
块的结尾。
编写您的JS以使用IE支持的语法(即使用函数表达式而不是箭头函数),或者将您的JS转换为IE支持的版本(使用Babel之类的工具)。
答案 1 :(得分:0)
根据OP的建议添加我的评论作为答案。
您可以尝试使用eval()解决此问题。 eval()
的作用是将字符串解析为可执行代码。从字面上看,这将使IE忽略此代码,因为它无论如何都不会执行。
是的,我们通常不使用eval()
,但是这种罕见的情况是使用它的完美理由。
以下是有关评估的一些资源:Why is using the JavaScript eval function a bad idea?
或者,如果可能的话,只需使用promise polyfill。
正如@Quentin解释的那样,仅使用函数表达式即可轻松解决此问题,而无需使用eval()
。