#javascript #html #npm #iframe
#javascript #HTML #npm #iframe
Вопрос:
Я пытаюсь создать сценарий, в котором, если кто-то нажмет на iframe, откроется новое окно для проверки того же URL-адреса на вкладке веб-браузера. Но прокрутка и другие события мыши в iframe не повлияют на это.
Я пробовал разные подходы, но ничего не получалось
Подход 1: пытался получить событие onClick самого iframe, но проблема кросс-происхождения сохраняется
Подход 2: попытался предоставить событие onClick родительскому элементу iframe, но поскольку события-указатели iframe включены, это не позволит родительскому onClick работать.
Подход 3: попытался создать наложение тега привязки над iframe. Это сработало, но остановило прокрутку iframe.
Вот мой код:
<div>
<iframe src="https://fr.wikipedia.org/wiki/Main_Page"></iframe>
<a href="https://fr.wikipedia.org/wiki/Main_Page" target="_blank"></a>
</div>
iframe {
width: 100%;
height: 100vh;
pointer-events: none;
}
a {
width: 100%;
height: 100vh;
position: absolute;
top: 0;
left: 0;
}
Скрипка: здесь
Возможно ли реализовать этот сценарий с помощью URL-адреса с перекрестным источником?
Ответ №1:
Ваш код не работает, потому что вы pointer-events: none;
установили его. Вы можете сделать так, что вы нажимаете «наложение кнопок» и перенаправляете пользователя с помощью javascript, после нажатия он «удаляет» наложение кнопок.
В моем случае я установил красный фон, чтобы было понятно, и я не удаляю кнопку, я просто скрываю ее. Вы можете настроить свой вариант использования. Также обратите внимание, что этот скрипт допускает только один из этих фреймов и кнопок. Если у вас есть больше, скрипт необходимо изменить, чтобы выполнить цикл и добавить EventListeners в button и посмотреть на его родительский элемент, чтобы добавить класс в контейнер (или если вы просто удалите кнопку)
const redirectAction = document.querySelector('.js-open-url')
redirectAction.addEventListener('click', function() {
window.open(
redirectAction.dataset.href,
'_blank'
)
document.querySelector('.container').classList.add('container--is-open')
})
.container {
position: relative;
}
iframe {
width: 100%;
height: 100vh;
}
.button {
width: 100%;
height: 100vh;
position: absolute;
top: 0;
left: 0;
z-index: 1;
background-color: red;
}
.container--is-open .button {
display: none;
}
<div class="container">
<iframe src="https://fr.wikipedia.org/wiki/Main_Page"></iframe>
<button class="button js-open-url" data-href="https://fr.wikipedia.org/wiki/Main_Page"></button>
</div>
Комментарии:
1. Спасибо, @Dejan. S но это сработает только один раз, после чего наложение будет удалено. Кроме того, проблема в том, что если я сделаю наложение выше на свой iframe, это не позволит прокручивать внутри iframe. То же, что я упоминал в подходе 3. Если я предоставляю onClick родительскому и делаю события указателя iframe none, тогда он также будет работать путем перенаправления на другую страницу, но проблема в том, что события указателя none, это остановит прокрутку внутри iframe, я пытаюсь заставить оба работать одновременно, если это возможно.
2. @DevProf не уверен, что я понимаю, что вы хотите сделать. В моем коде будет наложение, и при нажатии на него откроется новая вкладка, она удалит наложение и позволит вам использовать прокрутку внутри iframe. Разве это не то, чего вы хотите? Я пропустил ‘,’ так что, возможно, это нарушало наложение и перенаправление. Теперь это исправлено.
3. Я хочу то же самое, но предположим, что я не нажимаю на iframe, просто хочу прокрутить, в этом случае это наложение блокирует прокрутку iframe. Я пытаюсь реализовать, как в iframe, я могу прокручивать, а также, если я щелкну в любом месте iframe, он перенаправит меня на этот URL-адрес src.