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: | DOM | Assignee: | Nobody <webkit-unassigned> |
| Status: | NEW | ||
| Severity: | Normal | CC: | webkit-bug-importer |
| Priority: | P2 | Keywords: | InRadar |
| Version: | Safari 16 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
Jeason Xu
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.
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Jeason Xu
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('...')
Radar WebKit Bug Importer
<rdar://problem/110253831>