所以 - 我有一个页面,其中包含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有焦点!!
到底是什么??!?
有什么想法吗?
答案 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并不重要,您可以等待加载它直到用户请求它(通过链接或按钮)。他们就是这么想的。
如果PDF本地托管(或者您不介意进行某些缓存),另一种方法是使用Flash和SWFTools中的PDF2SWF等工具在后端进行转换。