Iframes, PDF и фокус с интернет-проводником - PullRequest
3 голосов
/ 24 апреля 2009

Итак - у меня есть страница, которая содержит текстовую область и динамически созданный IFrame, который отображает PDF с использованием плагина Adobe Acrobat.

Первоначально текстовая область фокусируется.

Я хочу, чтобы текстовая область была сфокусирована, но IFrame крадет фокус при загрузке pdf.

В Firefox сбросить текстовую область в качестве сфокусированного элемента тривиально.

Я делаю это, слушая событие загрузки iframes и затем вызывая .focus () для текстового поля.

M $ IE не запускает событие onload для динамически создаваемых Iframes, поэтому для определения его готовности я использую свойство readyState IFrame:

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


setTimeout(ieIframeReadyHandler, 100);

Примечание: я не слушаю событие readystatechanged iframe, так как оно, похоже, не запускается для случая readyState == "complete" !!

Так что же происходит, когда исполняется этот код? ..... Ну, ничего. PDF-файл Iframe по-прежнему находится в фокусе, однако, если я проверяю, какой элемент имеет фокус, используя document.activeElement (раньше это был только IE, теперь это поддерживается только в Firefox 3). Мне сообщили, что текстовая область имеет фокус !!

Какого черта ??!?

Есть идеи?

Ответы [ 3 ]

1 голос
/ 27 мая 2011

iframe.attachEvent("onload", function(){ }) - это способ iframe onload событий в IE.

1 голос
/ 28 апреля 2009

Попробуйте отложить настройку фокуса на 200-500 мсек. Это довольно распространенная проблема IE.

EDIT:

Использовать событие onLoad в IFRAME:

<body onLoad="parent.window.check_focus()"> .... </body>
0 голосов
/ 29 апреля 2009

В Internet Explorer свойство readystate iframe обновляется только внутри iframe, а не за его пределами. Это по замыслу, по любой причине. За пределами iframe нет надежного способа определить, загружено ли содержимое iframe.

Если не критично, чтобы iframe отображался сразу при загрузке страницы, вы можете просто подождать, чтобы загрузить его, пока пользователь не запросит его (через ссылку или кнопку). Таким образом, они ожидают этого.

Еще одна альтернатива, если PDF-файлы размещаются локально (или вы не возражаете против кэширования), - это использовать Flash и такой инструмент, как PDF2SWF из SWFTools , чтобы выполнить конвертацию на серверной стороне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...