1

我在 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 是否正常工作,我都需要继续加载所有内容。

如何才能做到这一点?

4

2 回答 2

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

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

于 2013-07-18T13:46:28.407 回答
0

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

<script type="text/javascript">
try {
      var socket = io.connect('http://192.168.0.15:8123');
} catch (e) {
}
</script>
于 2013-07-18T14:20:31.693 回答