Javascript 忽略脚本错误并继续加载页面
我在NodeJS SocketIO中有一个模块,客户端通过以下方式加载该模块: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
<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。