@zzdadelu/schema-builder 1.0.0-alpha.119 → 1.0.0-alpha.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/createIframe.js +1 -1
- package/lib/createIframe.js +1 -1
- package/package.json +1 -1
package/es/createIframe.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// createIframe.ts
|
|
2
2
|
var createIframeContent = function createIframeContent() {
|
|
3
3
|
var timestamp = new Date().getTime();
|
|
4
|
-
var html = "\n <html>\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n <title>XRender</title>\n <link rel=\"icon\" href=\"https://img.alicdn.com/tfs/TB17UtINiLaK1RjSZFxXXamPFXa-606-643.png\">\n <link href=\"https://alifd.alicdn.com/npm/@alifd/theme-lowcode-light@0.2.1/variables.css\" rel=\"stylesheet\" />\n <link href=\"https://alifd.alicdn.com/npm/@alifd/theme-lowcode-light@0.2.1/dist/next.var.min.css\" rel=\"stylesheet\" />\n <link rel=\"stylesheet\" href=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/css/engine-core.css\" />\n <link rel=\"stylesheet\" href=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/css/engine-ext.css\" />\n <link rel=\"stylesheet\" href=\"https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/css/index.css\" />\n \n <script>\n // \u5728 iframe \u4E2D\u6CE8\u518C Service Worker\n if ('serviceWorker' in navigator) {\n // \u521B\u5EFA Service Worker \u4EE3\u7801\n const swCode = `\n self.addEventListener('install', (event) => {\n self.skipWaiting();\n });\n \n self.addEventListener('activate', (event) => {\n event.waitUntil(clients.claim());\n });\n \n self.addEventListener('fetch', (event) => {\n const url = event.request.url;\n \n // \u62E6\u622A fr-generator \u76F8\u5173\u7684\u811A\u672C\u8BF7\u6C42\n const resourcesToIntercept = [\n 'react-simulator-renderer',\n 'moment.min.js',\n 'lodash.min.js',\n 'antd.min.js',\n 'next.min.js',\n 'index.umd.min.js',\n 'ant-design-icons-cdn',\n 'lowcode-react-simulator-renderer'\n ];\n \n const shouldIntercept = resourcesToIntercept.some(resource => \n url.includes(resource)\n );\n \n if (shouldIntercept) {\n console.log('Service Worker \u62E6\u622A\u8BF7\u6C42:', url);\n \n // \u6DFB\u52A0\u65F6\u95F4\u6233\n let modifiedUrl = url;\n if (!url.includes('t=')) {\n const separator = url.includes('?') ? '&' : '?';\n modifiedUrl = url + separator + 't=' + Date.now();\n }\n \n // \u521B\u5EFA\u65B0\u8BF7\u6C42\n const modifiedRequest = new Request(modifiedUrl, event.request);\n event.respondWith(fetch(modifiedRequest));\n }\n });\n `;\n \n const blob = new Blob([swCode], { type: 'application/javascript' });\n const swUrl = URL.createObjectURL(blob);\n \n navigator.serviceWorker.register(swUrl, {\n scope: './'\n }).then(registration => {\n console.log('Service Worker \u6CE8\u518C\u6210\u529F');\n }).catch(error => {\n console.error('Service Worker \u6CE8\u518C\u5931\u8D25:', error);\n });\n }\n \n window.React = window.parent.React;\n window.ReactDOM = window.parent.ReactDOM;\n </script>\n </head>\n\n <body>\n <div id=\"lce-container\"></div>\n \n <!-- \u52A0\u8F7D\u57FA\u7840\u5E93 -->\n <script src=\"https://g.alicdn.com/code/lib/prop-types/15.7.2/prop-types.js\"></script>\n <script src=\"https://g.alicdn.com/platform/c/react15-polyfill/0.0.1/dist/index.js\"></script>\n <script src=\"https://g.alicdn.com/platform/c/lodash/4.6.1/lodash.min.js\"></script>\n <script src=\"https://g.alicdn.com/mylib/moment/2.24.0/min/moment.min.js\"></script>\n <script src=\"https://g.alicdn.com/code/lib/alifd__next/1.23.24/next.min.js\"></script>\n <script crossorigin=\"anonymous\" src=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/js/engine-core.js\"></script>\n <script crossorigin=\"anonymous\" src=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/js/engine-ext.js\"></script>\n \n <!-- \u6700\u540E\u52A0\u8F7D fr-generator\uFF0C\u5B83\u4F1A\u88AB\u6211\u4EEC\u7684\u62E6\u622A\u5668\u76D1\u63A7 -->\n <script type=\"text/javascript\" src=\"https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/js/index.js?t=".concat(timestamp, "\"></script>\n </body>\n </html>\n ");
|
|
4
|
+
var html = "\n <html>\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n <title>XRender</title>\n <link rel=\"icon\" href=\"https://img.alicdn.com/tfs/TB17UtINiLaK1RjSZFxXXamPFXa-606-643.png\">\n <link href=\"https://alifd.alicdn.com/npm/@alifd/theme-lowcode-light@0.2.1/variables.css\" rel=\"stylesheet\" />\n <link href=\"https://alifd.alicdn.com/npm/@alifd/theme-lowcode-light@0.2.1/dist/next.var.min.css\" rel=\"stylesheet\" />\n <link rel=\"stylesheet\" href=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/css/engine-core.css\" />\n <link rel=\"stylesheet\" href=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/css/engine-ext.css\" />\n <link rel=\"stylesheet\" href=\"https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/css/index.css\" />\n\n <script>\n window.React = window.parent.React;\n window.ReactDOM = window.parent.ReactDOM;\n </script>\n \n <script>\n // \u5168\u9762\u7684 DOM \u62E6\u622A\u65B9\u6848\n (function() {\n console.log('\u542F\u52A8\u5168\u9762\u7684 DOM \u62E6\u622A\u65B9\u6848...');\n \n const targetResources = [\n 'react-simulator-renderer',\n 'moment.min.js',\n 'lodash.min.js',\n 'antd.min.js',\n 'next.min.js',\n 'index.umd.min.js',\n 'ant-design-icons-cdn',\n 'lowcode-react-simulator-renderer',\n 'alicdn.com/t/font_'\n ];\n \n // \u5224\u65AD\u662F\u5426\u76EE\u6807\u8D44\u6E90\n function isTargetResource(url) {\n return targetResources.some(resource => url.includes(resource));\n }\n \n // \u6DFB\u52A0\u65F6\u95F4\u6233\n function addTimestamp(url) {\n if (!url) return url;\n if (url.includes('t=')) return url;\n const separator = url.includes('?') ? '&' : '?';\n return url + separator + 't=' + Date.now();\n }\n \n // 1. \u62E6\u622A XMLHttpRequest\n if (window.XMLHttpRequest) {\n console.log('11111');\n\n const OriginalXHR = window.XMLHttpRequest;\n window.XMLHttpRequest = function() {\n const xhr = new OriginalXHR();\n const originalOpen = xhr.open;\n \n xhr.open = function(method, url, async, user, password) {\n if (isTargetResource(url)) {\n const modifiedUrl = addTimestamp(url);\n console.log('\u62E6\u622A XHR \u8BF7\u6C42:', url, '->', modifiedUrl);\n url = modifiedUrl;\n }\n return originalOpen.call(this, method, url, async, user, password);\n };\n \n return xhr;\n };\n }\n \n // 2. \u62E6\u622A fetch\n if (window.fetch) {\n console.log('22222');\n\n const originalFetch = window.fetch;\n window.fetch = function(input, init) {\n let url = typeof input === 'string' ? input : input.url;\n \n if (isTargetResource(url)) {\n const modifiedUrl = addTimestamp(url);\n console.log('\u62E6\u622A fetch \u8BF7\u6C42:', url, '->', modifiedUrl);\n \n if (typeof input === 'string') {\n input = modifiedUrl;\n } else {\n input = new Request(modifiedUrl, input);\n }\n }\n \n return originalFetch.call(this, input, init);\n };\n }\n \n // 3. \u62E6\u622A\u52A8\u6001\u5BFC\u5165\n if (window.importScripts) {\n console.log('333333');\n const originalImportScripts = window.importScripts;\n window.importScripts = function(...urls) {\n const modifiedUrls = urls.map(url => {\n if (isTargetResource(url)) {\n return addTimestamp(url);\n }\n return url;\n });\n console.log('\u62E6\u622A importScripts:', urls, '->', modifiedUrls);\n return originalImportScripts.apply(this, modifiedUrls);\n };\n }\n \n // 4. \u62E6\u622A createElement\n const originalCreateElement = document.createElement;\n document.createElement = function(tagName, options) {\n console.log('44444', tagName, options);\n const element = originalCreateElement.call(this, tagName, options);\n \n if (tagName.toLowerCase() === 'script') {\n // \u62E6\u622A src \u5C5E\u6027\n const descriptor = Object.getOwnPropertyDescriptor(element, 'src');\n if (descriptor && descriptor.set) {\n Object.defineProperty(element, 'src', {\n set: function(value) {\n if (isTargetResource(value)) {\n value = addTimestamp(value);\n console.log('\u521B\u5EFA script \u65F6\u4FEE\u6539 src:', value);\n }\n descriptor.set.call(this, value);\n },\n get: descriptor.get,\n configurable: true\n });\n }\n \n // \u62E6\u622A setAttribute\n const originalSetAttribute = element.setAttribute;\n element.setAttribute = function(name, value) {\n if (name === 'src' && isTargetResource(value)) {\n value = addTimestamp(value);\n console.log('\u521B\u5EFA script \u65F6\u4FEE\u6539 setAttribute:', value);\n }\n return originalSetAttribute.call(this, name, value);\n };\n }\n \n return element;\n };\n \n // 5. \u62E6\u622A appendChild\n const originalAppendChild = Node.prototype.appendChild;\n Node.prototype.appendChild = function(child) {\n if (child.tagName === 'SCRIPT' && child.src) {\n if (isTargetResource(child.src) && !child.src.includes('t=')) {\n const modifiedSrc = addTimestamp(child.src);\n console.log('appendChild \u65F6\u4FEE\u6539 script src:', child.src, '->', modifiedSrc);\n \n // \u521B\u5EFA\u65B0\u7684 script \u5143\u7D20\n const newScript = document.createElement('script');\n for (let attr of child.attributes) {\n if (attr.name === 'src') {\n newScript.src = modifiedSrc;\n } else {\n newScript.setAttribute(attr.name, attr.value);\n }\n }\n \n if (child.textContent) {\n newScript.textContent = child.textContent;\n }\n \n // \u590D\u5236\u4E8B\u4EF6\u76D1\u542C\u5668\uFF08\u5C3D\u53EF\u80FD\uFF09\n newScript.onload = child.onload;\n newScript.onerror = child.onerror;\n \n // \u66FF\u6362\u5143\u7D20\n return originalAppendChild.call(this, newScript);\n }\n }\n return originalAppendChild.call(this, child);\n };\n \n // 6. \u62E6\u622A insertBefore\n const originalInsertBefore = Node.prototype.insertBefore;\n Node.prototype.insertBefore = function(child, ref) {\n if (child.tagName === 'SCRIPT' && child.src) {\n if (isTargetResource(child.src) && !child.src.includes('t=')) {\n const modifiedSrc = addTimestamp(child.src);\n console.log('insertBefore \u65F6\u4FEE\u6539 script src:', child.src, '->', modifiedSrc);\n \n // \u521B\u5EFA\u65B0\u7684 script \u5143\u7D20\n const newScript = document.createElement('script');\n for (let attr of child.attributes) {\n if (attr.name === 'src') {\n newScript.src = modifiedSrc;\n } else {\n newScript.setAttribute(attr.name, attr.value);\n }\n }\n \n if (child.textContent) {\n newScript.textContent = child.textContent;\n }\n \n newScript.onload = child.onload;\n newScript.onerror = child.onerror;\n \n // \u66FF\u6362\u5143\u7D20\n return originalInsertBefore.call(this, newScript, ref);\n }\n }\n return originalInsertBefore.call(this, child, ref);\n };\n \n // 7. \u76D1\u542C\u7F51\u7EDC\u8BF7\u6C42\n if (window.performance && performance.getEntriesByType) {\n // \u76D1\u63A7\u5DF2\u7ECF\u52A0\u8F7D\u7684\u8D44\u6E90\n const resources = performance.getEntriesByType('resource');\n resources.forEach(resource => {\n if (resource.initiatorType === 'script' && isTargetResource(resource.name)) {\n console.log('\u5DF2\u52A0\u8F7D\u7684\u811A\u672C:', resource.name);\n }\n });\n }\n \n // 8. \u76D1\u63A7\u672A\u6765\u7684\u8D44\u6E90\u52A0\u8F7D\n if ('PerformanceObserver' in window) {\n const observer = new PerformanceObserver((list) => {\n list.getEntries().forEach(entry => {\n if (entry.initiatorType === 'script' && isTargetResource(entry.name)) {\n console.log('\u65B0\u811A\u672C\u52A0\u8F7D:', entry.name);\n \n // \u68C0\u67E5\u662F\u5426\u6709\u65F6\u95F4\u6233\n if (entry.name.includes('t=')) {\n console.log('\u2713 \u811A\u672C\u5305\u542B\u65F6\u95F4\u6233');\n } else {\n console.warn('\u2717 \u811A\u672C\u7F3A\u5C11\u65F6\u95F4\u6233');\n }\n }\n });\n });\n \n observer.observe({ entryTypes: ['resource'] });\n }\n \n console.log('\u5168\u9762\u7684 DOM \u62E6\u622A\u65B9\u6848\u5DF2\u542F\u52A8');\n })();\n </script>\n </head>\n\n <body>\n <div id=\"lce-container\"></div>\n \n <!-- \u52A0\u8F7D\u57FA\u7840\u5E93 -->\n <script src=\"https://g.alicdn.com/code/lib/prop-types/15.7.2/prop-types.js\"></script>\n <script src=\"https://g.alicdn.com/platform/c/react15-polyfill/0.0.1/dist/index.js\"></script>\n <script src=\"https://g.alicdn.com/platform/c/lodash/4.6.1/lodash.min.js\"></script>\n <script src=\"https://g.alicdn.com/mylib/moment/2.24.0/min/moment.min.js\"></script>\n <script src=\"https://g.alicdn.com/code/lib/alifd__next/1.23.24/next.min.js\"></script>\n <script crossorigin=\"anonymous\" src=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/js/engine-core.js\"></script>\n <script crossorigin=\"anonymous\" src=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/js/engine-ext.js\"></script>\n \n <!-- fr-generator -->\n <script type=\"text/javascript\" src=\"https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/js/index.js?t=".concat(timestamp, "\"></script>\n \n <!-- \u989D\u5916\u7684\u9A8C\u8BC1\u811A\u672C -->\n <script>\n // \u9A8C\u8BC1\u62E6\u622A\u662F\u5426\u6210\u529F\n window.addEventListener('load', () => {\n console.log('\u9875\u9762\u52A0\u8F7D\u5B8C\u6210\uFF0C\u68C0\u67E5\u6240\u6709\u811A\u672C...');\n \n const allScripts = document.querySelectorAll('script[src]');\n console.log(`\u603B\u5171 ${allScripts.length} \u4E2A\u811A\u672C`);\n \n let interceptedCount = 0;\n allScripts.forEach((script, index) => {\n const src = script.src;\n const hasTimestamp = src.includes('t=');\n \n console.log(`\u811A\u672C ${index}: ${hasTimestamp ? '\u2713' : '\u2717'} ${src}`);\n \n if (hasTimestamp) {\n interceptedCount++;\n }\n });\n \n console.log(`\u6210\u529F\u62E6\u622A: ${interceptedCount}/${allScripts.length}`);\n });\n </script>\n </body>\n </html>\n ");
|
|
5
5
|
return html;
|
|
6
6
|
};
|
|
7
7
|
export default (function () {
|
package/lib/createIframe.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
// createIframe.ts
|
|
8
8
|
var createIframeContent = function createIframeContent() {
|
|
9
9
|
var timestamp = new Date().getTime();
|
|
10
|
-
var html = "\n <html>\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n <title>XRender</title>\n <link rel=\"icon\" href=\"https://img.alicdn.com/tfs/TB17UtINiLaK1RjSZFxXXamPFXa-606-643.png\">\n <link href=\"https://alifd.alicdn.com/npm/@alifd/theme-lowcode-light@0.2.1/variables.css\" rel=\"stylesheet\" />\n <link href=\"https://alifd.alicdn.com/npm/@alifd/theme-lowcode-light@0.2.1/dist/next.var.min.css\" rel=\"stylesheet\" />\n <link rel=\"stylesheet\" href=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/css/engine-core.css\" />\n <link rel=\"stylesheet\" href=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/css/engine-ext.css\" />\n <link rel=\"stylesheet\" href=\"https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/css/index.css\" />\n \n <script>\n // \u5728 iframe \u4E2D\u6CE8\u518C Service Worker\n if ('serviceWorker' in navigator) {\n // \u521B\u5EFA Service Worker \u4EE3\u7801\n const swCode = `\n self.addEventListener('install', (event) => {\n self.skipWaiting();\n });\n \n self.addEventListener('activate', (event) => {\n event.waitUntil(clients.claim());\n });\n \n self.addEventListener('fetch', (event) => {\n const url = event.request.url;\n \n // \u62E6\u622A fr-generator \u76F8\u5173\u7684\u811A\u672C\u8BF7\u6C42\n const resourcesToIntercept = [\n 'react-simulator-renderer',\n 'moment.min.js',\n 'lodash.min.js',\n 'antd.min.js',\n 'next.min.js',\n 'index.umd.min.js',\n 'ant-design-icons-cdn',\n 'lowcode-react-simulator-renderer'\n ];\n \n const shouldIntercept = resourcesToIntercept.some(resource => \n url.includes(resource)\n );\n \n if (shouldIntercept) {\n console.log('Service Worker \u62E6\u622A\u8BF7\u6C42:', url);\n \n // \u6DFB\u52A0\u65F6\u95F4\u6233\n let modifiedUrl = url;\n if (!url.includes('t=')) {\n const separator = url.includes('?') ? '&' : '?';\n modifiedUrl = url + separator + 't=' + Date.now();\n }\n \n // \u521B\u5EFA\u65B0\u8BF7\u6C42\n const modifiedRequest = new Request(modifiedUrl, event.request);\n event.respondWith(fetch(modifiedRequest));\n }\n });\n `;\n \n const blob = new Blob([swCode], { type: 'application/javascript' });\n const swUrl = URL.createObjectURL(blob);\n \n navigator.serviceWorker.register(swUrl, {\n scope: './'\n }).then(registration => {\n console.log('Service Worker \u6CE8\u518C\u6210\u529F');\n }).catch(error => {\n console.error('Service Worker \u6CE8\u518C\u5931\u8D25:', error);\n });\n }\n \n window.React = window.parent.React;\n window.ReactDOM = window.parent.ReactDOM;\n </script>\n </head>\n\n <body>\n <div id=\"lce-container\"></div>\n \n <!-- \u52A0\u8F7D\u57FA\u7840\u5E93 -->\n <script src=\"https://g.alicdn.com/code/lib/prop-types/15.7.2/prop-types.js\"></script>\n <script src=\"https://g.alicdn.com/platform/c/react15-polyfill/0.0.1/dist/index.js\"></script>\n <script src=\"https://g.alicdn.com/platform/c/lodash/4.6.1/lodash.min.js\"></script>\n <script src=\"https://g.alicdn.com/mylib/moment/2.24.0/min/moment.min.js\"></script>\n <script src=\"https://g.alicdn.com/code/lib/alifd__next/1.23.24/next.min.js\"></script>\n <script crossorigin=\"anonymous\" src=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/js/engine-core.js\"></script>\n <script crossorigin=\"anonymous\" src=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/js/engine-ext.js\"></script>\n \n <!-- \u6700\u540E\u52A0\u8F7D fr-generator\uFF0C\u5B83\u4F1A\u88AB\u6211\u4EEC\u7684\u62E6\u622A\u5668\u76D1\u63A7 -->\n <script type=\"text/javascript\" src=\"https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/js/index.js?t=".concat(timestamp, "\"></script>\n </body>\n </html>\n ");
|
|
10
|
+
var html = "\n <html>\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n <title>XRender</title>\n <link rel=\"icon\" href=\"https://img.alicdn.com/tfs/TB17UtINiLaK1RjSZFxXXamPFXa-606-643.png\">\n <link href=\"https://alifd.alicdn.com/npm/@alifd/theme-lowcode-light@0.2.1/variables.css\" rel=\"stylesheet\" />\n <link href=\"https://alifd.alicdn.com/npm/@alifd/theme-lowcode-light@0.2.1/dist/next.var.min.css\" rel=\"stylesheet\" />\n <link rel=\"stylesheet\" href=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/css/engine-core.css\" />\n <link rel=\"stylesheet\" href=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/css/engine-ext.css\" />\n <link rel=\"stylesheet\" href=\"https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/css/index.css\" />\n\n <script>\n window.React = window.parent.React;\n window.ReactDOM = window.parent.ReactDOM;\n </script>\n \n <script>\n // \u5168\u9762\u7684 DOM \u62E6\u622A\u65B9\u6848\n (function() {\n console.log('\u542F\u52A8\u5168\u9762\u7684 DOM \u62E6\u622A\u65B9\u6848...');\n \n const targetResources = [\n 'react-simulator-renderer',\n 'moment.min.js',\n 'lodash.min.js',\n 'antd.min.js',\n 'next.min.js',\n 'index.umd.min.js',\n 'ant-design-icons-cdn',\n 'lowcode-react-simulator-renderer',\n 'alicdn.com/t/font_'\n ];\n \n // \u5224\u65AD\u662F\u5426\u76EE\u6807\u8D44\u6E90\n function isTargetResource(url) {\n return targetResources.some(resource => url.includes(resource));\n }\n \n // \u6DFB\u52A0\u65F6\u95F4\u6233\n function addTimestamp(url) {\n if (!url) return url;\n if (url.includes('t=')) return url;\n const separator = url.includes('?') ? '&' : '?';\n return url + separator + 't=' + Date.now();\n }\n \n // 1. \u62E6\u622A XMLHttpRequest\n if (window.XMLHttpRequest) {\n console.log('11111');\n\n const OriginalXHR = window.XMLHttpRequest;\n window.XMLHttpRequest = function() {\n const xhr = new OriginalXHR();\n const originalOpen = xhr.open;\n \n xhr.open = function(method, url, async, user, password) {\n if (isTargetResource(url)) {\n const modifiedUrl = addTimestamp(url);\n console.log('\u62E6\u622A XHR \u8BF7\u6C42:', url, '->', modifiedUrl);\n url = modifiedUrl;\n }\n return originalOpen.call(this, method, url, async, user, password);\n };\n \n return xhr;\n };\n }\n \n // 2. \u62E6\u622A fetch\n if (window.fetch) {\n console.log('22222');\n\n const originalFetch = window.fetch;\n window.fetch = function(input, init) {\n let url = typeof input === 'string' ? input : input.url;\n \n if (isTargetResource(url)) {\n const modifiedUrl = addTimestamp(url);\n console.log('\u62E6\u622A fetch \u8BF7\u6C42:', url, '->', modifiedUrl);\n \n if (typeof input === 'string') {\n input = modifiedUrl;\n } else {\n input = new Request(modifiedUrl, input);\n }\n }\n \n return originalFetch.call(this, input, init);\n };\n }\n \n // 3. \u62E6\u622A\u52A8\u6001\u5BFC\u5165\n if (window.importScripts) {\n console.log('333333');\n const originalImportScripts = window.importScripts;\n window.importScripts = function(...urls) {\n const modifiedUrls = urls.map(url => {\n if (isTargetResource(url)) {\n return addTimestamp(url);\n }\n return url;\n });\n console.log('\u62E6\u622A importScripts:', urls, '->', modifiedUrls);\n return originalImportScripts.apply(this, modifiedUrls);\n };\n }\n \n // 4. \u62E6\u622A createElement\n const originalCreateElement = document.createElement;\n document.createElement = function(tagName, options) {\n console.log('44444', tagName, options);\n const element = originalCreateElement.call(this, tagName, options);\n \n if (tagName.toLowerCase() === 'script') {\n // \u62E6\u622A src \u5C5E\u6027\n const descriptor = Object.getOwnPropertyDescriptor(element, 'src');\n if (descriptor && descriptor.set) {\n Object.defineProperty(element, 'src', {\n set: function(value) {\n if (isTargetResource(value)) {\n value = addTimestamp(value);\n console.log('\u521B\u5EFA script \u65F6\u4FEE\u6539 src:', value);\n }\n descriptor.set.call(this, value);\n },\n get: descriptor.get,\n configurable: true\n });\n }\n \n // \u62E6\u622A setAttribute\n const originalSetAttribute = element.setAttribute;\n element.setAttribute = function(name, value) {\n if (name === 'src' && isTargetResource(value)) {\n value = addTimestamp(value);\n console.log('\u521B\u5EFA script \u65F6\u4FEE\u6539 setAttribute:', value);\n }\n return originalSetAttribute.call(this, name, value);\n };\n }\n \n return element;\n };\n \n // 5. \u62E6\u622A appendChild\n const originalAppendChild = Node.prototype.appendChild;\n Node.prototype.appendChild = function(child) {\n if (child.tagName === 'SCRIPT' && child.src) {\n if (isTargetResource(child.src) && !child.src.includes('t=')) {\n const modifiedSrc = addTimestamp(child.src);\n console.log('appendChild \u65F6\u4FEE\u6539 script src:', child.src, '->', modifiedSrc);\n \n // \u521B\u5EFA\u65B0\u7684 script \u5143\u7D20\n const newScript = document.createElement('script');\n for (let attr of child.attributes) {\n if (attr.name === 'src') {\n newScript.src = modifiedSrc;\n } else {\n newScript.setAttribute(attr.name, attr.value);\n }\n }\n \n if (child.textContent) {\n newScript.textContent = child.textContent;\n }\n \n // \u590D\u5236\u4E8B\u4EF6\u76D1\u542C\u5668\uFF08\u5C3D\u53EF\u80FD\uFF09\n newScript.onload = child.onload;\n newScript.onerror = child.onerror;\n \n // \u66FF\u6362\u5143\u7D20\n return originalAppendChild.call(this, newScript);\n }\n }\n return originalAppendChild.call(this, child);\n };\n \n // 6. \u62E6\u622A insertBefore\n const originalInsertBefore = Node.prototype.insertBefore;\n Node.prototype.insertBefore = function(child, ref) {\n if (child.tagName === 'SCRIPT' && child.src) {\n if (isTargetResource(child.src) && !child.src.includes('t=')) {\n const modifiedSrc = addTimestamp(child.src);\n console.log('insertBefore \u65F6\u4FEE\u6539 script src:', child.src, '->', modifiedSrc);\n \n // \u521B\u5EFA\u65B0\u7684 script \u5143\u7D20\n const newScript = document.createElement('script');\n for (let attr of child.attributes) {\n if (attr.name === 'src') {\n newScript.src = modifiedSrc;\n } else {\n newScript.setAttribute(attr.name, attr.value);\n }\n }\n \n if (child.textContent) {\n newScript.textContent = child.textContent;\n }\n \n newScript.onload = child.onload;\n newScript.onerror = child.onerror;\n \n // \u66FF\u6362\u5143\u7D20\n return originalInsertBefore.call(this, newScript, ref);\n }\n }\n return originalInsertBefore.call(this, child, ref);\n };\n \n // 7. \u76D1\u542C\u7F51\u7EDC\u8BF7\u6C42\n if (window.performance && performance.getEntriesByType) {\n // \u76D1\u63A7\u5DF2\u7ECF\u52A0\u8F7D\u7684\u8D44\u6E90\n const resources = performance.getEntriesByType('resource');\n resources.forEach(resource => {\n if (resource.initiatorType === 'script' && isTargetResource(resource.name)) {\n console.log('\u5DF2\u52A0\u8F7D\u7684\u811A\u672C:', resource.name);\n }\n });\n }\n \n // 8. \u76D1\u63A7\u672A\u6765\u7684\u8D44\u6E90\u52A0\u8F7D\n if ('PerformanceObserver' in window) {\n const observer = new PerformanceObserver((list) => {\n list.getEntries().forEach(entry => {\n if (entry.initiatorType === 'script' && isTargetResource(entry.name)) {\n console.log('\u65B0\u811A\u672C\u52A0\u8F7D:', entry.name);\n \n // \u68C0\u67E5\u662F\u5426\u6709\u65F6\u95F4\u6233\n if (entry.name.includes('t=')) {\n console.log('\u2713 \u811A\u672C\u5305\u542B\u65F6\u95F4\u6233');\n } else {\n console.warn('\u2717 \u811A\u672C\u7F3A\u5C11\u65F6\u95F4\u6233');\n }\n }\n });\n });\n \n observer.observe({ entryTypes: ['resource'] });\n }\n \n console.log('\u5168\u9762\u7684 DOM \u62E6\u622A\u65B9\u6848\u5DF2\u542F\u52A8');\n })();\n </script>\n </head>\n\n <body>\n <div id=\"lce-container\"></div>\n \n <!-- \u52A0\u8F7D\u57FA\u7840\u5E93 -->\n <script src=\"https://g.alicdn.com/code/lib/prop-types/15.7.2/prop-types.js\"></script>\n <script src=\"https://g.alicdn.com/platform/c/react15-polyfill/0.0.1/dist/index.js\"></script>\n <script src=\"https://g.alicdn.com/platform/c/lodash/4.6.1/lodash.min.js\"></script>\n <script src=\"https://g.alicdn.com/mylib/moment/2.24.0/min/moment.min.js\"></script>\n <script src=\"https://g.alicdn.com/code/lib/alifd__next/1.23.24/next.min.js\"></script>\n <script crossorigin=\"anonymous\" src=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine/1.2.3/dist/js/engine-core.js\"></script>\n <script crossorigin=\"anonymous\" src=\"https://uipaas-assets.com/prod/npm/@alilc/lowcode-engine-ext/1.0.6/dist/js/engine-ext.js\"></script>\n \n <!-- fr-generator -->\n <script type=\"text/javascript\" src=\"https://g.alicdn.com/fone-lowcode/fr-generator/1.1.0/js/index.js?t=".concat(timestamp, "\"></script>\n \n <!-- \u989D\u5916\u7684\u9A8C\u8BC1\u811A\u672C -->\n <script>\n // \u9A8C\u8BC1\u62E6\u622A\u662F\u5426\u6210\u529F\n window.addEventListener('load', () => {\n console.log('\u9875\u9762\u52A0\u8F7D\u5B8C\u6210\uFF0C\u68C0\u67E5\u6240\u6709\u811A\u672C...');\n \n const allScripts = document.querySelectorAll('script[src]');\n console.log(`\u603B\u5171 ${allScripts.length} \u4E2A\u811A\u672C`);\n \n let interceptedCount = 0;\n allScripts.forEach((script, index) => {\n const src = script.src;\n const hasTimestamp = src.includes('t=');\n \n console.log(`\u811A\u672C ${index}: ${hasTimestamp ? '\u2713' : '\u2717'} ${src}`);\n \n if (hasTimestamp) {\n interceptedCount++;\n }\n });\n \n console.log(`\u6210\u529F\u62E6\u622A: ${interceptedCount}/${allScripts.length}`);\n });\n </script>\n </body>\n </html>\n ");
|
|
11
11
|
return html;
|
|
12
12
|
};
|
|
13
13
|
var _default = exports.default = function _default() {
|