Подтвердить что ты не робот

Предотвращение кражи фокуса iframe

У меня есть веб-сайт, в который встроен iframe. Когда я тестировал iframe, я использовал google.com и заметил, что поле ввода поиска сосредоточено. Очевидно, что я не буду использовать google.com для производства, но хотел бы предотвратить iframe от кражи фокуса.

Есть ли способ предотвратить iframe от кражи фокуса?

4b9b3361

Ответ 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')}

Поэтому, если пользователь касается экрана или щелкает полосу прокрутки, прокрутка разрешена. Казалось, работает хорошо для меня.