Bug 257450

Summary: document.focus or window onblur not trigger util a mouse move or click user gesture happened when an url-scheme launch dialog shows
Product: WebKit Reporter: Jeason Xu <jeason.xu93>
Component: DOMAssignee: Nobody <webkit-unassigned>
Status: NEW ---    
Severity: Normal CC: webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: Safari 16   
Hardware: Unspecified   
OS: Unspecified   

Description Jeason Xu 2023-05-29 02:33:14 PDT
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.
Comment 1 Jeason Xu 2023-05-29 02:39:04 PDT
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('...')
Comment 2 Radar WebKit Bug Importer 2023-06-05 02:34:16 PDT
<rdar://problem/110253831>