如何在Javascript中以编程方式从iframe获取父窗口的焦点

时间:2013-04-03 16:15:56

标签: javascript internet-explorer firefox iframe focus

某些网站在窗口加载时设置focus元素。如果我iframe那个网站,似乎无法以编程方式将焦点设置在父窗口上。这只发生在IE(9)和Firefox(19),Opera / Safari / Chrome很好。

<script>
window.onload = function() {
    setTimeout(function() {
        // this does not focus #foo
        document.getElementById("foo").focus();
    // or more seconds that enough to see the iframe focus
    }, 3000);
};
</script>
<input id="foo" type="text" value="foo" /><br />
<iframe width="800" height="500" src="http://www.bing.com" />

是否有人知道此问题的解决方法?

2 个答案:

答案 0 :(得分:5)

得到答案,现在它适用于所有浏览器

<script>
window.onload = function() {
    // blur the iframe
    document.getElementById("bing").blur();
    // set focus on #foo
    document.getElementById("foo").focus();
    // when iframe tries to focus, focus #foo
    document.getElementById("foo").onblur = function() {
        this.focus();
    };
};
</script>
<input id="foo" type="text" value="foo" /><br />
<iframe id="bing" width="800" height="500" src="http://wwww.bing.com" />

答案 1 :(得分:1)

如果我已正确阅读此内容,您只需要阻止焦点从父窗口转移到iframe中的元素。

我会使用&#39; onfocus&#39;触发iframe元素以将焦点切换回您的页面,如下所示:

<iframe width="800" height="500" src="http://www.bing.com" onfocus="document.getElementById('foo').focus();"/>

如果(我怀疑你这样做)你只想阻止iframe窃取初始焦点onload但希望用户以后能够将焦点转移到它上面,使用状态变量,如下所示:

<script type="text/javascript">
var initialFocus = false;
</script>

<iframe width="800" height="500" src="http://www.bing.com" onfocus="if (initialFocus==false) { document.getElementById('foo').focus(); initialFocus = true; }"/>

我希望这有帮助,如果您有任何问题我会在这里。