/** * V.AI STUDIO - Auto Excel Fix Loader v2.0 * Tự động tải fix script nếu chưa có, inject vào cuối body */ (function() { 'use strict'; // Kiểm tra xem file fix đã tồn tại chưa var fixFile = 'vai-quote-excel-order-fix-v1050.js'; // Kiểm tra script đã load chưa function checkFixLoaded() { return typeof window.VAI_FIX !== 'undefined' || document.querySelector('script[src*="vai-quote-excel-order-fix"]'); } // Inject script tag function injectFix() { if (checkFixLoaded()) { console.log('[Auto Loader] Fix script already loaded'); return; } var script = document.createElement('script'); script.src = '/' + fixFile + '?v=' + Date.now(); script.onload = function() { console.log('[Auto Loader] Excel fix script loaded successfully'); }; script.onerror = function() { console.warn('[Auto Loader] Failed to load fix script, using inline fallback'); applyInlineFix(); }; document.head.appendChild(script); } // Inline fix fallback function applyInlineFix() { // Patch URL.revokeObjectURL var originalRevoke = URL.revokeObjectURL; URL.revokeObjectURL = function(url) { if (url && url.startsWith('blob:')) { setTimeout(function() { try { originalRevoke.call(URL, url); } catch(e) {} }, 300000); return; } return originalRevoke.apply(this, arguments); }; console.log('[Auto Loader] Inline fix applied'); } // Chờ DOM ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', injectFix); } else { injectFix(); } // Thử lại sau 2s nếu chưa load setTimeout(injectFix, 2000); setTimeout(injectFix, 5000); })(); // Legacy support for older fix loaders window.__VAI_BLOB_REGISTRY = window.__VAI_BLOB_REGISTRY || { blobs: [], registry: [], isUnloading: false };