我正在开发一个网站,在用户输入文本框时加载iframe(来自其他域)。
有时,iframe会加载一个会窃取焦点的网站。这特别令人讨厌,因为用户将输入我的文本框,现在将输入 iframe的文本框。
似乎无法通过窃取焦点禁用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);
});
现在请注意,如果你想故意停止在文本字段中输入,那么这是多么糟糕。在加载iframe时,您已“锁定”到文本字段中...您甚至无法在浏览器的地址栏中输入内容。
有关如何改善这一点的任何想法?我希望我错过了一些完全明显的东西,但我很确定我不是。
一如既往,感谢您的帮助。
答案 0 :(得分:0)
一些想法(仅此而已)
观察文档的onmouseout-Event并将坐标与iframe的坐标进行比较。 所以应该可以发现用户是否进入了iframe(你可以假设“好”的焦点)
当然有更多方法可以将焦点设置为iframe,例如使用[TAB]
进行导航要捕捉到这一点,您可以插入一个可以在iframe之前立即聚焦的元素。 它应该在iframe之前具有焦点。
答案 1 :(得分:0)
如果焦点窃取是iframe文档中脚本导致重新聚焦其中一个元素的结果,则一个解决方案可能将使用iframe' s { {3}}属性可防止iframe文档运行脚本(即将属性设置为不包含标记的值' allow-scripts')。当然,这是否可以接受将取决于它是否会打破其他事情。