@grenvalz можно, но главное чтобы у тебя не было асинхронных (setTimeout/Promise/etc) вызовов в цепочке функций.
Если есть асинхронные вызовы - это уже не user trusted event, и браузер заблокирует не безопастные действие (открытие окна/проигрывание музыки/etc)
если нет никакого способа избавиться от асинхронных вызовов - есть хак, открыть модалку моментально, а потом, после асинхронного получения необходимых данных, по референсу на нее, подменить URL