Предотвращение кражи фокуса iframe
У меня есть веб-сайт, в который встроен iframe. Когда я тестировал iframe, я использовал google.com и заметил, что поле ввода поиска сосредоточено. Очевидно, что я не буду использовать google.com для производства, но хотел бы предотвратить iframe от кражи фокуса.
Есть ли способ предотвратить iframe от кражи фокуса?
Ответы
Ответ 1
Если у вас есть доступ к скриптам на стороне сервера, вы можете использовать его для загрузки живой копии страницы, которую вы хотите внедрить, поискать ее и удалить любой код кражи фокуса, а затем отобразить эту измененную страницу в вашем iframe. Или, если вы обнаружите, что нет кода кражи фокуса, вы можете просто связать свой iframe с удаленной страницей, как обычно.
Другим вариантом может быть изначально скрыть iframe с помощью CSS style="display:none"
и разрешить пользователю отображать его с помощью javascript Object.style.display="inline"
Ответ 2
Не совсем. Вы можете вернуть фокус в свое окно, если фокус удаляется (ПРЕДУПРЕЖДЕНИЕ: я не рекомендую использовать этот код):
<body onblur="window.focus();">
У этого есть некоторые не такие приятные побочные эффекты, как невозможность сосредоточиться на панели местоположений в Firefox или попасть в бесконечные циклы, если кадр также пытается бороться за фокус. Поэтому, если вы хотите сделать это (что большой "если", я не рекомендую его), вы должны хотя бы ограничить его фазой загрузки страницы и позволить после этого изменять фокус.
Ответ 3
Теперь для этой цели мы можем использовать атрибут песочницы HTML5:
<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" src="http://www.example.com"</iframe>
Параметры:
Property : Allows
allow-top-navigation : top-level redirects
allow-forms : form submission
allow-popups : popups
allow-pointer-lock : pointer lock
allow-same-origin : the document to maintain its origin
allow-scripts : JS
Ответ 4
Используйте функцию setTimeout
чтобы перефокусироваться на элементе по вашему выбору, например, window.onload = function(){ setTimeout( function() { element.focus() }, 500 ) };
Ответ 5
Я нашел решение здесь:
Отключить прокрутку тела/содержимого с помощью jQuery - disableScroll
Отключение прокрутки остановило фрейм фрейма от кражи фокуса.
Я использовал это в моем скрипте jquery:
if( $('iframe').length != 0 ) $(window).disablescroll();
window.addEventListener('touchstart', function onFirstTouch()
{
window.removeEventListener('touchstart', onFirstTouch, false);
AllowScrolling()
}, false);
$(window).on("scroll",function(){ $(window).off("scroll"); AllowScrolling() });
setTimeout('AllowScrolling()',5000); //Fallback
function AllowScrolling(){$(window).disablescroll('undo')}
Поэтому, если пользователь касается экрана или щелкает полосу прокрутки, прокрутка разрешена. Казалось, работает хорошо для меня.