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

时间:2013-07-18 13:36:07

标签: 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:8123');
    </script>

问题是,如果节点服务器处于脱机状态,脚本将中断,页面的其余部分将停止加载。

我的应用程序不依赖于Node正常运行,因此无论Node是否正常工作,我都需要继续加载所有内容。

如何做到这一点?

2 个答案:

答案 0 :(得分:0)

如果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);
  }
});

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

答案 1 :(得分:0)

如果您根本不关心io.connect的结果只是放入try / catch语句并忽略异常

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