Basic use case: open popup in setTimeout callback after 500ms. Safari allows this.


Await a blob read (via FileReader), then attempt to open a popup window. Use case: prepare some data before displaying it in a popup window. Safari blocks this, even though it finishes within 500ms, which would have been allowed had a simple timer been used.


postMessage() to a Web Worker and wait for a response, then attempt to open a popup window. Use case: running all code in a Web Worker with OffscreenCanvas. This uses an architecture where the DOM serves only to forward input events to the worker, the worker then runs all logic, and if it needs to make a DOM call, posts back to the DOM to run commands the worker does not have direct access to. Safari blocks this, even though it finishes within 500ms, which would have been allowed had a simple timer been used.


postMessage() to a Web Worker and wait for a response, then attempt to request device orientation permission via DeviceOrientationEvent.requestPermission(). Use case: as above.