Подавить onbeforeunload в удаленном фрейме - PullRequest
3 голосов
/ 29 марта 2012

У меня есть страница, на которой встраивается 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 Ответ

1 голос
/ 24 мая 2012

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

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

...