iframe,pdfs和焦点与Internet Explorer

时间:2009-04-24 15:08:48

标签: internet-explorer pdf iframe adobe focus

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

最初,textarea是专注的。

我希望textarea能够被聚焦,但是当加载pdf时,IFrame会抢走焦点。

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

我是通过收听iframes“load”事件然后在文本框中调用.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 ==“完整”的情况!!

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

到底是什么??!?

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

尝试将对焦时间延迟200-500毫秒。这是非常常见的IE问题。

编辑:

在IFRAME中使用onLoad事件:

<body onLoad="parent.window.check_focus()"> .... </body>

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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