User activation can be transferred to a cross-origin child frame via a postMessage option.

Click this instruction text.


FAIL Cross-origin user activation transfer through postMessages undefined is not an object (evaluating 'navigator.userActivation.isActive')

