我在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是否正常工作,我都需要继续加载所有内容。
如何做到这一点?
答案 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>