102 lines
3.9 KiB
HTML
102 lines
3.9 KiB
HTML
<!--BEGIN-->
|
||
<!--<% var { env: $env, process: $process, mode: $mode, builtInfo: $builtInfo, links: $links, redirectLogin: $redirectLogin, framework: $framework, scripts: $scripts, element: $element } = htmlWebpackPlugin.options %>-->
|
||
<!--<% var { appKey: $appKey, antd: $antd, basename: $basename, API_HOST: $API_HOST } = $process %>-->
|
||
<!--<% var { ['ant-prefix']: $antPrefix, fontFamily: $fontFamily, colorPrimary: $colorPrimary, borderRadius: $borderRadius } = $antd %>-->
|
||
<!--NED-->
|
||
<!DOCTYPE html>
|
||
<html lang="zh">
|
||
<head data-built-info="<%= $builtInfo %>">
|
||
<meta charset="UTF-8"/>
|
||
<meta name="renderer" content="webkit"/>
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/>
|
||
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,viewport-fit=cover">
|
||
<% for (const item of $links) { %>
|
||
<link type="text/css" rel="stylesheet" href="<%= item %>"></link>
|
||
<% } %>
|
||
<title>--</title>
|
||
<script>
|
||
(function () {
|
||
const APP_ENV = {
|
||
antd: {
|
||
'ant-prefix': '<%= $antPrefix %>',
|
||
fontFamily: '<%= $fontFamily %>',
|
||
colorPrimary: '<%= $colorPrimary %>',
|
||
borderRadius: parseInt('<%= $borderRadius %>')
|
||
},
|
||
appKey: '<%= $appKey %>',
|
||
basename: '<%= $basename %>',
|
||
API_HOST: '<%= $API_HOST %>'
|
||
};
|
||
const injectedApiHost = APP_ENV.API_HOST;
|
||
const isDev = '<%= $mode %>' === 'development';
|
||
// 开发环境优先 jjb.config 注入的 API_HOST,避免 sessionStorage 残留网关地址导致 Network Error
|
||
if (isDev && injectedApiHost && injectedApiHost.indexOf('http') === 0) {
|
||
APP_ENV.API_HOST = injectedApiHost;
|
||
} else {
|
||
APP_ENV.API_HOST = sessionStorage.API_HOST || injectedApiHost || window.location.origin;
|
||
}
|
||
window.process = {
|
||
env: { app: APP_ENV },
|
||
NODE_ENV: '<%= $mode %>'
|
||
};
|
||
window.__JJB_ENVIRONMENT__ = {
|
||
API_HOST: APP_ENV.API_HOST,
|
||
redirect: '<%= $redirectLogin %>',
|
||
FRAMEWORK: APP_ENV.antd
|
||
};
|
||
})();
|
||
|
||
// 抑制 ResizeObserver 在页面/标签切换时的无害告警,避免 dev overlay 误报
|
||
(function () {
|
||
if (typeof window.ResizeObserver !== 'undefined') {
|
||
var NativeResizeObserver = window.ResizeObserver;
|
||
window.ResizeObserver = class extends NativeResizeObserver {
|
||
constructor(callback) {
|
||
super(function (entries, observer) {
|
||
window.requestAnimationFrame(function () {
|
||
callback(entries, observer);
|
||
});
|
||
});
|
||
}
|
||
};
|
||
}
|
||
|
||
function isResizeObserverLoopError(message) {
|
||
return typeof message === 'string' && message.indexOf('ResizeObserver loop') !== -1;
|
||
}
|
||
|
||
function isAxiosNetworkError(reason) {
|
||
if (!reason) return false;
|
||
var msg = typeof reason === 'string' ? reason : (reason.message || '');
|
||
return msg === 'Network Error' || (reason.isAxiosError && msg === 'Network Error');
|
||
}
|
||
|
||
window.addEventListener('error', function (event) {
|
||
if (isResizeObserverLoopError(event.message)) {
|
||
event.stopImmediatePropagation();
|
||
event.preventDefault();
|
||
}
|
||
});
|
||
|
||
window.addEventListener('unhandledrejection', function (event) {
|
||
if (isAxiosNetworkError(event.reason)) {
|
||
console.warn('[dev] API unreachable:', event.reason?.config?.url || event.reason?.message);
|
||
event.preventDefault();
|
||
}
|
||
});
|
||
})();
|
||
</script>
|
||
<!-- SCRIPTS -->
|
||
<% for (const item of $scripts) { %>
|
||
<script src="<%= item %>" type="text/javascript"></script>
|
||
<% } %>
|
||
</head>
|
||
<body >
|
||
<!-- NOSCRIPT -->
|
||
<noscript>此网页需要开启JavaScript功能。</noscript>
|
||
<!-- MAIN -->
|
||
<% const { root } = $element; %>
|
||
<div id="<%= root.id %>" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div>
|
||
</body>
|
||
</html>
|