Как предотвратить блокировку фокуса в iFrame [дополнительно]? - PullRequest
4 голосов
/ 02 октября 2010

Я работаю над сайтом, который загружает iframe (из другого домена), когда пользователь вводит текстовое поле.

Иногда iframe загружает сайт, который захватит фокус.Это особенно раздражает, так как пользователь будет набирать текст my textbox, а теперь будет набирать текстовое поле iframe .

Кажется, что нет никакого способаотключить фрейм от кражи фокуса.Чтобы смягчить это, я пытаюсь найти разумный способ выяснить, когда перефокусировать мою текстовую область.Это оказывается довольно головной болью. Основная причина того, что это отстой, в том, что я не могу найти способ предсказать, когда мое текстовое поле было размыто преднамеренно, по сравнению с тем, когда фрейм iframe украл фокус.Мы получили, но мне нужна помощь:

var my_textbox = $("#my_textbox");
var iframe = $("#iframe");
var enableBlur = true;

my_textbox.blur(function(){
  if (!enableBlur){
     //settimeout is required to redo focus.  annoying.
     //sadly, within these "0" ms, the user can still type
     //into the iframe's textbox. like i said:  annoying.   :(
     setTimeout(function(){ my_textbox[0].focus(); } , 0);  
  }
});


//later on, in some function

//lets disable blur while the iframe loads
enableBlur = false;
iframe.attr("src", "http://www.some-site-that-steals-focus.com");
iframe.bind("load", function(){
  //note: this is fired *after* the page loads

  //assume the threat of focus stealing is gone
  //after 1 second of the iframe being loaded
  setTimeout(function(){ enableBlur = true; }, 1000);
});

Теперь обратите внимание, насколько ужасен UX, если вы хотите намеренно прекратить вводить текстовое поле.Во время загрузки iframe вы «заперты» в текстовом поле ... вы даже не можете ввести текст в адресную строку браузера.

Есть идеи, как это улучшить?Я надеюсь, что упускаю что-то совершенно очевидное, но я почти уверен, что нет.

Как всегда, спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Если кража фокуса является результатом сценария в документе iframe, вызывающего перефокусировку на одном из его элементов, то одним из решений может быть использование атрибута sandbox iframe длядокумент iframe из запущенного скрипта (то есть установка атрибута в значение, которое не содержит флаг 'allow-scripts').Конечно, приемлемо ли это, будет зависеть от того, сломает ли это другие вещи.

0 голосов
/ 02 октября 2010

некоторые идеи (не более)

наблюдать за событием onmouseout документа и сравнивать координаты с координатами фрейма. Таким образом, должно быть возможно обнаружить, вошел ли пользователь в iframe (и вы можете принять «хороший» фокус)

Конечно, есть и другие способы установить фокус на iframe, например, навигация с помощью [TAB]

Чтобы поймать это, вы можете вставить элемент, который может быть сфокусирован непосредственно перед фреймом. Он должен иметь фокус перед тем, как это сделает iframe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...