3

所以 - 我有一个页面,其中包含一个 textarea 和一个动态创建的 IFrame,它使用 adobe acrobat 插件显示 PDF。

最初,文本区域是聚焦的。

我希望 textarea 被聚焦,但是 IFrame 在加载 pdf 时会窃取焦点。

在 Firefox 中,将 textarea 重置为焦点元素是微不足道的。

我通过监听 iframe“加载”事件然后在文本框上调用 .focus() 来做到这一点。

M$ IE 不会触发动态创建的 Iframe 的 onload 事件,因此要确定它何时准备就绪,我使用 IFrame 的 readyState 属性:

var ieIframeReadyHandler = function() { 
    if( iframe.readyState=="complete" ) {
           textarea.focus();
    } else {
        setTimeout(ieIframeReadyHandler, 100);
    }
}


setTimeout(ieIframeReadyHandler, 100);

注意:我不听 iframe 的 readystatechanged 事件,因为它似乎不会为 readyState=="complete" 案例触发!

那么当这段代码执行时会发生什么?.....好吧,什么都没有。Iframe pdf 仍然是焦点,但是如果我使用 document.activeElement 检查哪个元素具有焦点(以前这只是 IE,但是 firefox 3 现在支持这一点)我被告知 textarea 确实有焦点!

我勒个去??!?

有任何想法吗?

4

3 回答 3

1

尝试将焦点设置延迟 200-500 毫秒。这是很常见的IE问题。

编辑:

在 IFRAME 中使用 onLoad 事件:

<body onLoad="parent.window.check_focus()"> .... </body>
于 2009-04-27T20:15:01.317 回答
1

iframe.attachEvent("onload", function(){ })是在 IE 中做iframe onload事件的方式。

于 2011-05-27T01:03:00.897 回答
0

在 Internet Explorer 中,iframe 的 readystate 属性仅在 iframe 内部更新,而不在其外部更新。无论出于何种原因,这是设计使然。从 iframe 外部没有可靠的方法来确定 iframe 内容是否已加载。

如果在页面加载时立即显示 iframe 并不重要,您可以简单地等待加载它,直到用户请求它(通过链接或按钮)。这样他们就可以期待了。

如果 PDF 在本地托管(或者您不介意进行一些缓存),另一种选择是使用 Flash 和 SWFTools 中的PDF2SWF等工具在后端进行转换。

于 2009-04-29T06:49:24.670 回答