有没有一种方法可以执行此功能检查而不会产生错误?

时间:2019-10-09 18:39:56

标签: javascript html

在我的index.html网站上,我正在执行功能检查。旧的浏览器用户将被重定向到一个网站,告诉他们更新浏览器:

@import

有效。问题是功能检查后,我正在使用功能。而且旧的浏览器可能会生成错误消息。

避免错误消息的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:0)

您可以简单地将new Function代码放在else块中:

if (typeof Function == 'undefined') {
  location.href = 'old-browsers.html';
} else {
  var f = new Function('return true;');
}

答案 1 :(得分:0)

编辑2:当要调用该功能时,检查该功能是否受支持将是一种更加简洁的设计。这样可以更轻松地处理多个JS文件。

如果所有代码都在一个JS文件中,则我发布的初始方法可以很好地工作,但是在运行多个JS文件时可能会引起问题(在兼容性检查之前可能会调用一个函数)。

if(function1) { //if function1 is supported
  function1();
}
else {
  location.href = 'some_link.hmtl';
}

//function2 could be in a separate JS file

if(function2) { //if function2 is supported
  function2();
}
else {
  location.href = 'some_link.hmtl';
}


如果将所有代码都放在单个<script>标签中,则您的代码应该可以正常工作而不会引发错误。

编辑:结果证明代码也不需要位于同一脚本标签中;您的方法应该可以正常工作。

Javascript是一种 解释性 语言,而不是 编译的 语言,这意味着将按以下方式对语句进行求值:一个在运行时。因此,如果浏览器太旧,则应满足if条件之一,location.href行将立即执行,而无需查看其后的函数调用。

<!-- feature check -->
<script>
if (typeof Function == 'undefined') {
    // this line will immediately redirect, and the code below it will not be reached
    location.href = 'old-browsers.html';
}

//using the functions
var f = new Function('return true;');