2011-02-06 6 views
2

Я строю редактор WYISWYG с iframe с designMode = 'on'.Javascript: Event in iFrame

Проблема заключается в том, что я не могу использовать любое событие на IFRAME в Firefox и Opera (IE непроверенных), например, я хотел бы отслеживать OnKeyUp событие:

document.getElementById("myFrame").onkeyup = function(){ 
    doSomething... 
} 

, но не работает в родительском окне.

Я пытался в IFRAME тоже с этим:

top.frames[0].onkeyup = function(){ 
     doSomething... 
} 

и все такие вещи, как эти:

top.document.frames[0].onkeyup 
top.frames["myFrame"].onkeyup 
top.frames[0].document.onkeyup 

Но никто из них не хочет работать так, в конце концов оказалось, что даже window.onclick не работает, так что теперь я немного смущен ...

Какое решение для этого?

EDIT

Проблема, кажется, с document.designMode = "on" в IFRAME

+0

Является ли ваш iframe в другом домене? Можете ли вы опубликовать пример http://JSFiddle.net? –

+0

Нет, это не в другом домене. У него есть источник, но оба файла находятся на локальном хосте. Как я могу опубликовать пример там, если нет способа добавить другой файл HTML в качестве источника iframe? – Adam

ответ

8

Я бы предложил поймать событие на IFrame-х Document, и в Firefox по крайней мере, вы должны сделать это с помощью addEventListener(), а не onkeyup. Следующее будет работать во всех основных браузерах:

var iframe = document.getElementById("myFrame"); 
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; 

function handleIframeKeyUp(evt) { 
    alert("Key up!"); 
} 

if (typeof iframeDoc.addEventListener != "undefined") { 
    iframeDoc.addEventListener("keyup", handleIframeKeyUp, false); 
} else if (typeof iframeDoc.attachEvent != "undefined") { 
    iframeDoc.attachEvent("onkeyup", handleIframeKeyUp); 
} 
+0

Это работает с кликом, клавиатурой и т. Д., Но не фокусируется или не размывается. Есть идеи? –

+0

@Nick: 'focus' и' blur' не пузырятся и не загораются в документе. Он может работать с самим элементом iframe или его окном ('iframe.contentWindow'). –

+0

Я обнаружил, что он работал в Firefox, но Safari и Chrome не отвечали на события размытия/фокусировки самого элемента iframe, мне пришлось привязывать эти события к элементу body внутри iframe. –