Я работаю над сайтом, который загружает 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 вы «заперты» в текстовом поле ... вы даже не можете ввести текст в адресную строку браузера.
Есть идеи, как это улучшить?Я надеюсь, что упускаю что-то совершенно очевидное, но я почти уверен, что нет.
Как всегда, спасибо за вашу помощь.