将焦点设置为iframe内容

Jim*_*mmy 40 javascript iframe dom setfocus

我有一个带有document.onkeydown事件处理程序的页面,我将它加载到另一个页面的iframe中.我必须在iframe内部单击才能让内容页面开始"收听".

有没有什么方法可以在外部页面中使用JavaScript将焦点设置到内部页面,所以我不必在iframe内部单击?

编辑:回复评论:

上下文是主窗口是一个类似灯箱的系统,除了代替图片,它显示iframe,每个iframe是一个带有keydown/mousemove处理程序的交互式页面.这些处理程序在显示灯箱之后点击iframe之前不会触发.

我实际上并不像传统意义上的"setFocus"那样"在iframe contentDocument上启用事件处理程序"

che*_*ing 55

我在jQuery Thickbox(一个灯箱式对话框小部件)中遇到了类似的问题.我解决问题的方法如下:

function setFocusThickboxIframe() {
    var iframe = $("#TB_iframeContent")[0];
    iframe.contentWindow.focus();
}

$(document).ready(function(){
   $("#id_cmd_open").click(function(){
      /*
         run thickbox code here to open lightbox,
         like tb_show("google this!", "http://www.google.com");
       */
      setTimeout(setFocusThickboxIframe, 100);
      return false;
   });
});
Run Code Online (Sandbox Code Playgroud)

没有setTimeout(),代码似乎不起作用.根据我的测试,它适用于Firefox3.5,Safari4,Chrome4,IE7和IE6.

  • 我猜这是因为 A:iframe 必须完成加载,B:safari 有(有?)与此相关的错误,并且需要 setTimeout 至少为 1 (2认同)

dan*_*nza 20

使用contentWindow.focus()方法,可能需要超时才能等待iframe完全加载.

对我来说,也可以使用onload="this.contentWindow.focus()"firefox 将属性作用到iframe标签中


Jai*_*res 7

document.getElementsByName("iframe_name")[0].contentWindow.document.body.focus();
Run Code Online (Sandbox Code Playgroud)


Lia*_*iam 5

尝试侦听父文档中的事件并将事件传递给 iframe 文档中的处理程序。