Получать события mousemove из iframe, тоже

У меня есть приложение javascript, которое добавляет прослушиватель mousemove в документ. Проблема: Когда мышь перемещается по iframe, функция не вызывается.

есть ли способ, чтобы пройти через такие события в корневой документ?

5 ответов


вы можете сделать это довольно легко, если документ в iframe находится на том же документе.домен.

Если у вас есть тот же документ.домен, вам нужно будет установить прослушиватель mousemove в iframe, а также передать значения на родительскую страницу.

Если документы не находятся в одном документе.домен становится довольно сложным, и вам понадобится страница iframes для запуска самого javascript, который устанавливает прослушиватель событий mousemove. и тогда вы можете сделать крест связь кадров, как описано здесь: http://softwareas.com/cross-domain-communication-with-iframes

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


Put pointer-events: none; в стилях для рамки.

У меня была эта проблема, и я обнаружил, что это решение отлично работает и так просто!


у меня только что была такая же проблема, и я придумал это:

$("iframe").contents().find("body").mousemove(function(cursor){
        $("#console").html(cursor.pageX+":"+cursor.pageY);
    });
    $(document).mousemove(function(cursor){
        $("#console").html(cursor.pageX+":"+cursor.pageY);
    });

.contents().find("body") захватывает содержимое внутри iframe и .mousemove() можно использовать для добавления прослушивателя событий

тест html...

<div id="console"></div>

вы должны смотреть через объединение родителей document событие связывания с document.getElementById('iFrameId').contentDocument event, witch позволяет получить доступ к элементам содержимого iFrame.

https://stackoverflow.com/a/38442439/2768917

function bindIFrameMousemove(iframe){
    iframe.contentWindow.addEventListener('mousemove', function(event) {
        var clRect = iframe.getBoundingClientRect();
        var evt = new CustomEvent('mousemove', {bubbles: true, cancelable: false});

        evt.clientX = event.clientX + clRect.left;
        evt.clientY = event.clientY + clRect.top;

        iframe.dispatchEvent(evt);
    });
};

bindIFrameMousemove(document.getElementById('iFrameId'));

хотя указатель-события: нет; в стилях для фрейма можно решить эту проблему,но он отключил любые другие события в iframe, мое решение состоит в переключении значения, как:

{{pointer-events : isMoving? 'none' : 'all' }}