When launch an url scheme on safari, safari shows a lauch dialog. This dialog should take back focus from document, but when I console "document.hasFocus()", this value still be true. Util I move my mouse, this value changes. I use "document.hasFocus()" changes when lauch a application by url scheme to detect if an application is installed or not. This works in other browser.
Here is demo code: const launchSharingApp = (urlScheme) => { if (!urlScheme) return; const frameId = 'url-scheme-frame-id'; let tempIframe = document.getElementById(frameId); if (!tempIframe) { tempIframe = document.createElement('iframe'); tempIframe.id = frameId; tempIframe.style.display = 'none'; document.body.appendChild(tempIframe); } tempIframe.contentWindow.location.href = urlScheme; setTimeout(() => { if (!document.hasFocus()) { /** if lost focus very fast, it means broswer's own confirm dialog shows. * User has no chance to touch other app */ console.log('app installed'); } }, 50); }; launchSharingApp('...')
<rdar://problem/110253831>