Подавить onbeforeunload в удаленном фрейме

У меня есть страница, на которой встраивается iframe из другого домена (для оплаты кредитной картой). Страница, загруженная в iframe, регистрирует обработчик onbeforeunload. Это означает, что всякий раз, когда я пытаюсь отойти от родительской страницы или нажать кнопку перезагрузки, он запрашивает подтверждение у пользователя. Хорошо, пока.

Однако на родительской странице должны быть взаимодействия, которые должны работать без вызова обработчика onbeforeunload, вызываемого в iframe. Вот упрощенный пример:

<iframe src="https://paymentprovider.com/payment"></iframe>
<a href="/abort_payment">Abort payment (fire onbeforeunload)</a>
<a href="/alternative_payment">I don't have a credit card (suppress onbeforeunload)</a>

Я не могу использовать песочницу iframe, потому что для работы iframe требуется Javascript. Я также попытался установить атрибут песочницы в iframe динамически, но это не работает надежно.

Единственный способ, которым я смог подавить окно подтверждения, - это удалить iframe в обработчике ссылок onclick:

iframe = document.getElementById("payment_iframe");
iframe.parentNode.removeChild(iframe)

Вы видите какие-либо проблемы с этим взломом? Это вообще должно работать? Знаете ли вы какой-либо лучший способ сделать то же самое?

Спасибо

1 ответ

Решение

Нет, это довольно хорошее и надежное решение, при условии, что для его работы необходим javascript.

(Один крайний случай, который вы пропустите - это гики, которые отключили javascript для вашей страницы, но не провайдер платежа, но, судя по всему, они получат этот надоедливый излишний один дополнительный вопрос, который они как бы просили во всяком случае, на каком-то уровне.)

Другие вопросы по тегам