const vscode = require('vscode'); let _context; let panel; const previewKey = 'savedPreviewUrl'; // Key to store last opened URL const previewColumnKey = 'savedPreviewColumn'; // Key to store last panel position function initFrame(context) { _context = context; // Register command to open the preview tab let disposable = vscode.commands.registerCommand('itk.openPreview', async () => { const url = await vscode.window.showInputBox({ prompt: 'Enter the URL to preview', placeHolder: 'https://example.com' }); if (url) { runFrame(url); } }); context.subscriptions.push(disposable); // Restore last opened preview on activation const savedUrl = context.globalState.get(previewKey); const savedColumn = context.globalState.get(previewColumnKey) || vscode.ViewColumn.One; if (savedUrl) { runFrame(savedUrl, savedColumn); } } // Function to open a WebView preview function runFrame(url, column = vscode.ViewColumn.Active) { let globalState = _context.globalState; if (panel) { // If panel exists, update the content and restore position panel.webview.html = getWebviewContent(url); panel.reveal(column); } else { // Create a new WebView panel in the last known position panel = vscode.window.createWebviewPanel( 'webPreview', 'Web Preview', column, { enableScripts: true } ); panel.webview.html = getWebviewContent(url); // Save URL & position for persistence globalState.update(previewKey, url); globalState.update(previewColumnKey, column); // Track panel movement panel.onDidChangeViewState(e => { if (panel.visible) { globalState.update(previewColumnKey, panel.viewColumn); } }); // Handle WebView disposal (clear references) panel.onDidDispose(() => { panel = null; globalState.update(previewKey, undefined); globalState.update(previewColumnKey, undefined); }); } global.backupTabs && global.backupTabs(); } // Generate HTML content with an iframe function getWebviewContent(url) { return `