Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 忽略脚本错误并继续加载页面_Javascript - Fatal编程技术网

Javascript 忽略脚本错误并继续加载页面

Javascript 忽略脚本错误并继续加载页面,javascript,Javascript,我在NodeJS SocketIO中有一个模块,客户端通过以下方式加载该模块: <script type="text/javascript" src="<?PHP echo $socketServer; ?>socket.io/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect('http://192.168.0.15:8

我在NodeJS SocketIO中有一个模块,客户端通过以下方式加载该模块:

<script type="text/javascript" src="<?PHP echo $socketServer; ?>socket.io/socket.io.js"></script>
    <script type="text/javascript">
      var socket = io.connect('http://192.168.0.15:8123');
    </script>
问题是,如果节点服务器脱机,脚本将中断,页面的其余部分将停止加载

我的应用程序不依赖于节点来正常运行,所以无论节点是否工作,我都需要进行加载


如何做到这一点?

如果socket.io脚本是可选的,那么您可以实现脚本的延迟加载:

function lazyLoad(url, callback) {
  var script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = url;

  script.onload = script.onreadystatechange = function() {
    if (script.loaded == false && (!this.readyState || this.readyState == 'complete')) {
      script.loaded = true;

      console.log('script loaded');
      callback();
    }
  };
  script.onerror = function() {
    console.log('error loading');
  }

  document.body.appendChild(script);
}
然后这样使用:

lazyLoad('/socket.io/socket.io.js', function() {
  try {
    var socket = io.connect('http://192.168.0.15:8123');
  } catch(e) {
    console.log(e);
  }
});

顺便说一句,请确保您在同一台服务器上加载并连接到socket.io,否则您将面临CORS问题以及基于不同浏览器安全策略的许多安全限制。

如果您根本不关心io.connect的结果,只需将其放入try/catch语句中并忽略异常即可

<script type="text/javascript">
try {
      var socket = io.connect('http://192.168.0.15:8123');
} catch (e) {
}
</script>

这是一种有点粗鲁的检查方式。另外,考虑到socket.io.js将从同一台服务器加载,那么通常两者都不可用。当浏览器试图加载不可用的脚本时,如果它在头部,它将显著延迟页面加载,所以需要延迟加载或异步参数来防止页面加载闲置,直到触发超时。你只是从下面复制粘贴了我的代码,弄乱了缩进我向大师鞠躬:哦,是的,当我懒得加载没有双关语的文本时,我总是复制粘贴manually@MaksimsMihjevs如果我尝试此操作,我将无法调用null的方法“appendChild”::是否发生在第行:document.body.appendChildscript;?确保在页面加载$document.ready后调用lazyLoad。