JQuery слушать события в iframe - PullRequest
       29

JQuery слушать события в iframe

9 голосов
/ 24 февраля 2011

Я делаю очень простой Rich Text Editor, использующий jquery ... Я не хочу использовать сторонний.

Мне нужно прослушивать события внутри iframe (в том же домене и т. Д.)), начиная с ввода.По-видимому, мне нужно будет часто использовать bind ().

Это то, что у меня есть в данный момент, и это прекрасно работает в IE8 (как ни удивительно), но не в Chrome.

<script>
$(function() {
    $('#text').contents().bind("keyup keydown keypress", function(e) {
        var code = e.keyCode || e.which;
        alert(code);
        return false;
    });
});
</script>

<body>
    <iframe id="text" name="text" src="edit.html"></iframe>
</body>

В случае нажатия клавиши выше, я также хочу получить текущее значение 'edit.html' и обновить текстовое поле с этим значением ...

Любая помощь будет НАМНОГО признательна:)

Большое спасибо

РЕДАКТИРОВАТЬ: для дальнейшего объяснения edit.html - это редактируемый файл, использующий "document.body.contentEditable = true;"

-

РЕДАКТИРОВАТЬ 2:

edit.html =

<script language="javascript">
    function InitializeIFrame() {
        document.body.contentEditable = true;                         
    } 

</script>
<html>
<body onload="InitializeIFrame();">

</body>
</html>

Ответы [ 2 ]

14 голосов
/ 24 февраля 2011

Мне кажется, что я столкнулся с проблемой, когда пытался связаться с iframe (тот же домен и т. Д.).Хитрость, которую я нашел, заключается в том, чтобы выполнить связывание внутри фрейма и связать с функциями в главном окне.Примерно так (в edit.html):

<script>
$('body').bind("keyup keydown keypress", function(e) {
  window.parent && window.parent.funcKey && window.parent.funcKey(e);
});
</script>

, а затем на главной странице что-то вроде:

<script>
function funcKey(e) {
  var code = e.keyCode || e.which;
  alert(code);
  return false;
}
</script>

Я понимаю, что это не совсем соответствует тому, как вы пыталисьсделать это, но тот же эффект достигается.Из того, что я понимаю о javascript и iframe, на практике легче общаться с родителем, чем с iframe.Если вам действительно нужна двусторонняя связь, вы можете (следуя примеру выше) использовать возвращаемое значение функции funcKey () для передачи данных обратно в iframe.

0 голосов
/ 24 февраля 2011

Одна из самых раздражающих вещей в javascript - это то, что document.frames ["frameID"] возвращает объект, отличный от document.getElementById ("frameID").(это то, что вы получаете, когда используете $ ("# frameID"))

Это различие, вероятно, является причиной возникновения кросс-браузерных проблем.Скорее всего, вам придется возиться с различными способами доступа к содержимому iframe, пока вы не найдете тот, который работает правильно.

...