1 2<!doctype html> 3<html lang="pt-BR"> 4 <head> 5 <meta charset="UTF-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <!-- Google Tag Manager --> 8
8<script>
vendor: 335 bytes, lines 8-12
8(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 9 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 10 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 11 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 12 })(window,document,'script','dataLayer','
12GTM-53PMKH3Q
vendor: 3 bytes, line 12
12');
12</script>
12 13 <!-- End Google Tag Manager --> 14 <link rel="icon" type="image/png" href="/assets/img/e407c738c19aa457fde45b0372f0e0fe.png" /> 15 <meta name="generator" content="Hostinger Horizons" /> 16 17 <title>Delta Connect â Internet fibra óptica em ParnaÃba-PI e no Maranhão</title> 18 19 <!-- ===== SEO e prévia de link â MELHORIA ============================= 20 O site hoje só cria estas tags depois que o React carrega, e o robô 21 do WhatsApp e do Facebook não executa JavaScript: ele lê o HTML cru. 22 Por isso o link colado no WhatsApp aparece sem tÃtulo, sem descrição 23 e sem imagem. Estando aqui, no HTML servido, a prévia passa a montar. 24 â ï¸ og:image aponta de propósito para o CDN público â o robô externo 25 não enxerga a intranet. --> 26 <meta name="description" content="Internet de fibra óptica de até 1 Giga em ParnaÃba, Cajueiro da Praia, Araioses, Ãgua Doce e Santana do Maranhão. Planos a partir de R$ 89,99/mês, instalação e suporte local." /> 27 <link rel="canonical" href="https://deltaconnect.com.br/" /> 28 <meta property="og:type" content="website" /> 29 <meta property="og:site_name" content="Delta Connect" /> 30 <meta property="og:locale" content="pt_BR" /> 31 <meta property="og:url" content="https://deltaconnect.com.br/" /> 32 <meta property="og:title" content="Delta Connect â Internet fibra óptica em ParnaÃba-PI e no Maranhão" /> 33 <meta property="og:description" content="Fibra óptica de até 1 Giga a partir de R$ 89,99/mês. ParnaÃba, Cajueiro da Praia, Araioses, Ãgua Doce e Santana do Maranhão." /> 34 <meta property="og:image" content="https://horizons-cdn.hostinger.com/e8fbb394-d63d-4a09-9f70-bb18d2509fa2/6ddedcf0515d83d27475d4ebe269c6da.png" /> 35 <meta property="og:image:width" content="1600" /> 36 <meta property="og:image:height" content="1067" /> 37 <meta name="twitter:card" content="summary_large_image" /> 38 <meta name="theme-color" content="#0095da" /> 39 <!-- ================================================================= --> 40 41
41<script type="module" crossorigin src="/assets/index-C1bzszNx.js?v=20260921d"></script>
41 42 <link rel="stylesheet" crossorigin href="/assets/index-D41OlxGh.css"> 43 <link rel="stylesheet" href="/assets/melhorias.css?v=20260921d"> 44
44<script type="module"> 45window.onerror = (message, source, lineno, colno, errorObj) => { 46 const errorDetails = errorObj ? JSON.stringify({ 47 name: errorObj.name, 48 message: errorObj.message, 49 stack: errorObj.stack, 50 source, 51 lineno, 52 colno, 53 }) : null; 54 55 window.parent.postMessage({ 56 type: 'horizons-runtime-error', 57 message, 58 error: errorDetails 59 }, '*'); 60}; 61</script>
61 62
62<script type="module"> 63const observer = new MutationObserver((mutations) => { 64 for (const mutation of mutations) { 65 for (const addedNode of mutation.addedNodes) { 66 if ( 67 addedNode.nodeType === Node.ELEMENT_NODE && 68 ( 69 addedNode.tagName?.toLowerCase() === 'vite-error-overlay' || 70 addedNode.classList?.contains('backdrop') 71 ) 72 ) { 73 handleViteOverlay(addedNode); 74 } 75 } 76 } 77}); 78 79observer.observe(document.documentElement, { 80 childList: true, 81 subtree: true 82}); 83 84function handleViteOverlay(node) { 85 if (!node.shadowRoot) { 86 return; 87 } 88 89 const backdrop = node.shadowRoot.querySelector('.backdrop'); 90 91 if (backdrop) { 92 const overlayHtml = backdrop.outerHTML; 93 const parser = new DOMParser(); 94 const doc = parser.parseFromString(overlayHtml, 'text/html'); 95 const messageBodyElement = doc.querySelector('.message-body'); 96 const fileElement = doc.querySelector('.file'); 97 const messageText = messageBodyElement ? messageBodyElement.textContent.trim() : ''; 98 const fileText = fileElement ? fileElement.textContent.trim() : ''; 99 const error = messageText + (fileText ? ' File:' + fileText : ''); 100 101 window.parent.postMessage({ 102 type: 'horizons-vite-error', 103 error, 104 }, '*'); 105 } 106} 107</script>
107 108
108<script type="module"> 109const originalConsoleError = console.error; 110const MATCH_LINE_COL_REGEX = /:(\d+):(\d+)\)?\s*$/; // regex to match the :lineNum:colNum 111const MATCH_AT_REGEX = /^\s*at\s+(?:async\s+)?(?:.*?\s+)?\(?/; // regex to remove the 'at' keyword and any 'async' or function name 112const MATCH_PATH_REGEX = /^\//; // regex to remove the leading slash 113 114function parseStackFrameLine(line) { 115 const lineColMatch = line.match(MATCH_LINE_COL_REGEX); 116 if (!lineColMatch) return null; 117 const [, lineNum, colNum] = lineColMatch; 118 const suffix = `:${lineNum}:${colNum}`; 119 const idx = line.lastIndexOf(suffix); 120 if (idx === -1) return null; 121 const before = line.substring(0, idx); 122 const path = before.replace(MATCH_AT_REGEX, '').trim(); 123 if (!path) return null; 124 125 try { 126 const pathname = new URL(path).pathname; 127 const filePath = pathname.replace(MATCH_PATH_REGEX, '') || pathname; 128 return `${filePath}:${lineNum}:${colNum}`; 129 } catch (e) { 130 const filePath = path.replace(MATCH_PATH_REGEX, '') || path; 131 return `${filePath}:${lineNum}:${colNum}`; 132 } 133} 134 135function getFilePathFromStack(stack, skipFrames = 0) { 136 if (!stack || typeof stack !== 'string') return null; 137 const lines = stack.split('\n').slice(1); 138 139 const frames = lines.map(line => parseStackFrameLine(line.replace(/\r$/, ''))).filter(Boolean); 140 141 return frames[skipFrames] ?? null; 142} 143 144console.error = function(...args) { 145 originalConsoleError.apply(console, args); 146 147 let errorString = ''; 148 let filePath = null; 149 150 for (let i = 0; i < args.length; i++) { 151 const arg = args[i]; 152 if (arg instanceof Error) { 153 filePath = getFilePathFromStack(arg.stack, 0); 154 errorString = `${arg.name}: ${arg.message}`; 155 if (filePath) { 156 errorString = `${errorString} at ${filePath}`; 157 } 158 break; 159 } 160 } 161 162 if (!errorString) { 163 errorString = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : String(arg)).join(' '); 164 const stack = new Error().stack; 165 filePath = getFilePathFromStack(stack, 1); 166 if (filePath) { 167 errorString = `${errorString} at ${filePath}`; 168 } 169 } 170 171 window.parent.postMessage({ 172 type: 'horizons-console-error', 173 error: errorString 174 }, '*'); 175}; 176</script>
176 177
177<script type="module"> 178const originalFetch = window.fetch; 179 180window.fetch = function(...args) { 181 const url = args[0] instanceof Request ? args[0].url : args[0]; 182 183 // Skip WebSocket URLs 184 if (url.startsWith('ws:') || url.startsWith('wss:')) { 185 return originalFetch.apply(this, args); 186 } 187 188 return originalFetch.apply(this, args) 189 .then(async response => { 190 const contentType = response.headers.get('Content-Type') || ''; 191 192 // Exclude HTML document responses 193 const isDocumentResponse = 194 contentType.includes('text/html') || 195 contentType.includes('application/xhtml+xml'); 196 197 if (!response.ok && !isDocumentResponse) { 198 const responseClone = response.clone(); 199 const errorFromRes = await responseClone.text(); 200 const requestUrl = response.url; 201 console.error(`Fetch error from ${requestUrl}: ${errorFromRes}`); 202 } 203 204 return response; 205 }) 206 .catch(error => { 207 if (!url.match(/.html?$/i)) { 208 console.error(error); 209 } 210 211 throw error; 212 }); 213}; 214</script>
214 215
215<script type="module"> 216if (window.navigation && window.self !== window.top) { 217 window.navigation.addEventListener('navigate', (event) => { 218 const url = event.destination.url; 219 220 try { 221 const destinationUrl = new URL(url); 222 const destinationOrigin = destinationUrl.origin; 223 const currentOrigin = window.location.origin; 224 225 if (destinationOrigin === currentOrigin) { 226 return; 227 } 228 } catch (error) { 229 return; 230 } 231 232 window.parent.postMessage({ 233 type: 'horizons-navigation-error', 234 url, 235 }, '*'); 236 }); 237} 238</script>
238 239 </head> 240 <body>
vendor: 70 bytes, lines 240-241
240 241 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
241GTM-53PMKH3Q
vendor: 87 bytes, lines 241-243
241" 242 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 243
243<div id="root"></div> 244
244<script src="/assets/melhorias.js?v=20260921d"></script>
244 245 </body> 246</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.