У меня есть смешная проблема, которую мне нужно решить. Короче говоря, Internet Explorer использует событие window.onblur, чтобы сфокусировать элемент в iFrame. Из-за этого это рекурсия, и вы не можете щелкнуть что-либо за пределами iFrame. Проблема возникает в IE9, IE10, IE11 (не IE8 и ниже).Internet Explorer Iframe recursive window.onblur
Попробуйте здесь: Try it (in IE)
Скачать его здесь: Download it
Моего реальный вопрос: Есть ли способ, чтобы перезаписать событие window.onblur внутри плавающего фрейма снаружи плавающего фрейма? Это ошибка, и я должен сообщить об этом где-то в Microsoft?
Update
Спасибо за помощь @ Джонатан Самсона, это работает, как можно увидеть здесь:
See working example - вы должны ждать, пока IFrame не будет полностью загружен, чтобы иметь возможность перезаписать
Спасибо, что посмотрели. Действительно, это работает. Но вам нужно подождать, пока IFrame не будет загружен или он будет перезаписан. Я надеюсь, что есть хороший способ сделать это за пределами IFrame, но вопрос решается с помощью этого ответа. – CodingYourLife
@CodingYourLife В идеале вы должны изменить код * внутри * iframe таким образом, чтобы он привязывался к 'window.top' вместо этого или просто отказывался добавлять обработчик к' onblur', если 'window! == window.top'. Если вам нужно внести изменения из верхнего окна, вы можете привязать к событию iframe 'DOMContentLoaded' или' Load' и запустить там свой код, избегая необходимости в 'setTimeout'. – Sampson
Решил мою конкретную проблему с обходным решением. В моем случае у меня была вкладка навигации, которая изменила iFrame src (другого выхода не было). Я не мог подключиться к событию загрузки (также не имел доступа к странице содержимого iFrame) и даже пытался сбросить onblur каждые 1 секунду, но я мог даже видеть в отладчике, что onblur не установил значение null после строки. То, что я сделал, было новым событием onblur на странице, включая iFrame, который спрашивает пользователя, хочет ли он покинуть текущую вкладку. Если да, я устанавливаю IFrame src примерно: blank и затем перезаписываю onblur. -> превратил его в "особенность" ^^ – CodingYourLife