Javascript 在Firefox的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的对话框,然后在对话框打开后在iframe内设置焦点

目前,我尝试在加载内容时将重点放在iframe上:

<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事件。