Javascript 在Firefox的iframe中聚焦
我将打开一个包含iframe的对话框,然后在对话框打开后在iframe内设置焦点 目前,我尝试在加载内容时将重点放在iframe上:Javascript 在Firefox的iframe中聚焦,javascript,firefox,iframe,focus,onload,Javascript,Firefox,Iframe,Focus,Onload,我将打开一个包含iframe的对话框,然后在对话框打开后在iframe内设置焦点 目前,我尝试在加载内容时将重点放在iframe上: <iframe src="../credits.html" onload="this.contentWindow.focus()"></iframe> 它适用于除Firefox之外的所有浏览器,我不明白为什么 有人能告诉我为什么吗? 谢谢,Firefox似乎没有contentWindow属性,您应该使用contentDocument
<iframe src="../credits.html" onload="this.contentWindow.focus()"></iframe>
它适用于除Firefox之外的所有浏览器,我不明白为什么
有人能告诉我为什么吗?
谢谢,Firefox似乎没有contentWindow属性,您应该使用contentDocument 更新: 经过一场小辩论,我想出了一个更好的解决办法:
<html>
<head>
<title></title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$(function() {
$("#xframe").bind("load", function(){
$(this).contents().find("#xa").focus();
});
});
</script>
</head>
<body>
<iframe id="xframe" src="./y.html"></iframe>
</body>
</html>
$(函数(){
$(“#xframe”).bind(“load”,function(){
$(this.contents().find(#xa”).focus();
});
});
在这个例子中,我假设y.html中有一个输入字段,它有一个“xa”id。它在Chrome和Firefox上都能工作
旧答案
最好使用jquery,例如:
<html>
<head>
<title></title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#xframe").focus();
});
</script>
</head>
<body>
<iframe id="xframe" src="./y.html"></iframe>
</body>
</html>
$(文档).ready(函数(){
$(“#xframe”).focus();
});
当然,您可以做一些额外的检查,看看iframe是否准备好了
更多信息可在此处找到尝试使用jquery执行此操作
// focus an input in iframe
$('#xframe').contents().find('input').get(0).focus()
// or simply iframe window
var iframe= $('#xframe')[0];
var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;
iframewindow.focus()
我也想知道这一点。现在是2015年,Firefox似乎不允许iframe关注自身或其内部的任何东西。这个极其简单的提琴在Firefox中不起作用:可能与@user2867288重复您的提琴不起作用的原因可能是因为JSFIDLE正在将焦点设置到它们的代码编辑器中,或者以其他方式窃取焦点,使您的框架无法工作。我无法在我们的JSFIDLE上重现这个问题,甚至这个代码也能工作:
至于最初的问题,这个代码对我来说一半时间有效,另一半时间失败。很奇怪。可能是时间问题吧。我想我的问题更多的是关于firefox中帧如何聚焦自身的问题。e、 你如何让这个JSFIDLE在firefox中工作?它在JSFIDLE上不起作用,因为其他东西正在窃取焦点。如果您在全屏上运行它,它将工作:setInterval仅在我实际单击预览窗格时开始工作,在我单击out时停止工作。这意味着Firefox正在施加一个其他浏览器没有的限制。如果你看一看,你会发现你的代码在工作。事实上,JSFIDLE编辑器正在窃取焦点。如果转到,您将看到源代码并注意到我使用了jQuery document.ready。如果您不这样做(或者使用其他方法,如setInterval),那么您的代码将在DOM准备就绪之前执行,因此它将不起作用。试试这个铬合金的。然后在Firefox中试试。它在铬合金中工作。它在Firefox中不起作用。这就是问题所在。在我看来,在用户关注iframe之前,Firefox沙盒会一直关注iframe事件。