Javascript 在地址栏中启动焦点时Firefox焦点转换失败

Javascript 在地址栏中启动焦点时Firefox焦点转换失败,javascript,firefox,focus,onload,address-bar,Javascript,Firefox,Focus,Onload,Address Bar,当我试图在页面加载时将焦点设置为输入元素时,Firefox在某些情况下会失败。代码如下: :focus { outline: 3px solid #ff0000; } <script type="text/javascript"> function setFocus() { document.getElementById('input-id').focus(); document.getElementById('input-id').

当我试图在页面加载时将焦点设置为输入元素时,Firefox在某些情况下会失败。代码如下:

:focus {
    outline: 3px solid #ff0000;
}

<script type="text/javascript">
    function setFocus() {
        document.getElementById('input-id').focus();
        document.getElementById('input-id').select();
        console.log(document.activeElement);
    }
</script>

<body onload="setFocus()">
    <div><input id="input-id" type="text" value="Waiting for focus..." onfocus="console.log('Received focus!')" /></div>
</body>
请在此处尝试:。这个想法很简单,当页面加载时,输入元素获得焦点,文本被选中

在以下情况下,它在Firefox中工作:

将光标放在URL栏中,然后按Enter键; 将光标放在输入文本中,然后按Enter键,或按重新加载按钮,或在Windows和Linux上按Ctrl-R键,在Mac上按Cmd-R键。 但是在Firefox中,如果你把光标放在URL栏中,然后按重新加载按钮,或者在Windows和Linux上按Ctrl-R,在Mac上按Cmd-R,它就不起作用了。您可以从console.log中看到,DOM认为activeElement是输入,但这在两种意义上都不是真的:

CSS输入选择器未激活; 输入元素未收到焦点事件。 所以DOM现在处于混乱状态,这在我的应用程序中造成了严重的问题!只是因为用户单击URL栏并按重新加载,而不是不单击URL栏并按重新加载,或者单击URL栏并按Enter。真是一团糟

我所说的Firefox是指:

Linux和Mac上的FF15; Windows和Linux上的FF10; 窗口上的FF9。 它在我尝试过的每一个Chrome和Safari版本上都运行良好

我唯一的解决方案是在.focus之前引入警报。不太满意!我应该在警报中添加什么?Firefox错误解决方法,请按OK


感激地接受任何更好的想法:

用window.focus初始化;似乎将焦点推出地址栏。

使用窗口初始化。焦点;似乎将焦点从地址栏中推出