Published: 2/19/2026 URL in JavaScript APEX JavaScript URL in JavaScript Example:function parseApexUrl(url = window.location.href) { const urlObj = new URL(url); const pathParts = urlObj.pathname.split('/').filter(Boolean); // Query parameters as array of {key, value} const paramsArray = Array.from(urlObj.searchParams.entries()).map( ([key, value]) => ({ key, value }) ); // Determine if classic (non-friendly) URL: /ords/f?p=... const isClassic = pathParts.length > 0 && pathParts[pathParts.length - 1] === 'f' && urlObj.searchParams.has('p'); // Oracle APEX environment (if available) const apexEnv = (typeof apex !== "undefined" && apex.env) ? apex.env : null; const apexSessionId = apexEnv ? apexEnv.APP_SESSION : null; const apexPageId = apexEnv ? apexEnv.APP_PAGE_ID : null; // Classic URL parsing let workspace = null, appAlias = null, pageAlias = null, serviceName = null, baseIndex = null; let sessionId = null, pageId = null; if (isClassic) { serviceName = pathParts[0] || null; // Extract appId, pageId/alias, sessionId from the p parameter const fParam = urlObj.searchParams.get('p'); const parts = fParam ? fParam.split(':') : []; sessionId = apexSessionId || (parts.length > 2 ? parts[2] : urlObj.searchParams.get('session')) || null; if (apexPageId && parts[1]) { if (parts[1] === apexPageId) { pageId = apexPageId; pageAlias = null; } else { pageId = apexPageId; pageAlias = parts[1]; } } else { pageId = parts[1] || null; pageAlias = null; } } else { // Friendly URL parsing let rIndex = pathParts.indexOf('r'); baseIndex = (rIndex !== -1) ? rIndex + 1 : null; workspace = (baseIndex !== null) ? pathParts[baseIndex] || null : null; appAlias = (baseIndex !== null) ? pathParts[baseIndex + 1] || null : null; pageAlias = (baseIndex !== null) ? pathParts[baseIndex + 2] || null : null; serviceName = (rIndex > 0) ? pathParts.slice(0, rIndex).join('/') : (pathParts[0] || null); sessionId = apexSessionId || urlObj.searchParams.get('session') || null; pageId = apexPageId || null; } // Reconstruct the full URL let fullUrlReconstructed; if (isClassic) { // For classic URLs, preserve the original query string exactly const portPart = urlObj.port ? `:${urlObj.port}` : ''; fullUrlReconstructed = `${urlObj.protocol}//${urlObj.hostname}${portPart}${urlObj.pathname}`; if (urlObj.search) { fullUrlReconstructed += urlObj.search; } } else { // For friendly URLs, reconstruct as normal const portPart = urlObj.port ? `:${urlObj.port}` : ''; const reconstructedQuery = paramsArray .map(param => encodeURIComponent(param.key) + '=' + encodeURIComponent(param.value)) .join('&'); fullUrlReconstructed = `${urlObj.protocol}//${urlObj.hostname}${portPart}${urlObj.pathname}${reconstructedQuery ? '?' + reconstructedQuery : ''}`; } // Compare original and reconstructed URLs const reconstructionValid = (url === fullUrlReconstructed); return { protocol: urlObj.protocol, hostname: urlObj.hostname, port: urlObj.port, fullUrl: url, fullUrlReconstructed: fullUrlReconstructed, reconstructionValid: reconstructionValid, paramsArray: paramsArray, workspace: workspace, appAlias: appAlias, pageAlias: pageAlias, serviceName: serviceName, pathParts: pathParts, baseIndex: baseIndex, sessionId: sessionId, pageId: pageId, apexEnv: apexEnv }; }Run:parseApexUrl()