const _socketPreView = function () {
const socketProtocol = (location.protocol === 'https:' ? 'wss' : 'ws');
const socketHost = location.host;
const socketObj = new WebSocket(`${socketProtocol}://${socketHost}`, 'vite-hmr');
socketObj.addEventListener('message', async ({ data }) => {
var res = JSON.parse(data);
// console.log(111111111111,res)
if (res.type == 'error') {
//判断与当前功能是否是同一路径
var src = location.pathname;
if (src.indexOf('/func') > -1) {
src = src.split('/func')[0];
}
if (src.indexOf('/flow') > -1) {
src = src.split('/flow')[0];
}
if (src.indexOf('/view') > -1) {
src = src.split('/view')[0];
}
if (res.err.id.indexOf(src) > -1) {
// console.error(res.err.frame)
// console.log("%c "+res.err.frame, "background-color: #000; color: #ab8a01;");
if(!res.err.loc){
res.err.loc = { file: res.err.id, line: 0, column: 0 }
res.err.frame = res.err.pluginCode.replace(/&/g, '&').replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
var str = [
'预览功能:' + document.title + ' 出错!!!',
'相关文件:<span style="color:#3a96dd">' + res.err.loc.file + '</span>',
'错误位置:' + '<span style="color:#3a96dd">第' + res.err.loc.line + '行,第' + res.err.loc.column + '列,请分析以下 ^ 符号所指向的行。</span>'
];
console.error('\n\n', str.join('\n'), '\n' + res.err.frame, '\n\n', res.err, '\n\n');
var errEl = document.createElement('div');
errEl.style = 'font-size:14px;color:red;width:100%;word-break: break-all;background: #000;padding: 15px;box-sizing: border-box;border-radius: 10px;';
errEl.innerHTML = str.join('<br><br>') + '<div style="color:#ab8a01">' + res.err.frame.replace(/\r|\n/g, '<br>').replace(/ /g, ' ') + '</div>';
document.getElementById('app').appendChild(errEl)
}
}
//
});
// 心跳包消息内容
const heartbeatMessage = '{"type":"ping"}';
// 定义心跳包发送间隔(毫秒)
const heartbeatInterval = 5000; // 每5秒发送一次心跳包
// 发送心跳包函数
function sendHeartbeat() {
if (socketObj.readyState === WebSocket.OPEN) {
socketObj.send(heartbeatMessage);
}
}
// 监听WebSocket连接打开事件
socketObj.addEventListener("open", () => {
// 开始发送心跳包
setInterval(sendHeartbeat, heartbeatInterval);
})
//
}
_socketPreView();