Iframe крадет события мыши - PullRequest
1 голос
/ 29 марта 2012

Я использую класс прокрутки Javascript на сайте, который плавно заботится о добавлении полосы прокрутки ко всем предопределенным элементам на странице с переполненным содержимым. Недавно клиент спросил, что один из этих элементов содержит iframe, чтобы они могли легко добавлять интерактивный контент в эту область. (Я знаю, я знаю, iframes, но я являюсь субподрядчиком в этой работе. Не сильно тянет.) К счастью, содержимое iFram извлекается из того же домена, поэтому я могу изменить размер iframe после загрузки содержимого , в свою очередь, запускает полосу прокрутки JavaScript. В конце все работает прекрасно - в Chrome.

В Explorer и Firefox iframe, кажется, крадет события мыши, как только мышь находится над iframe. Таким образом, событие mousewheel больше не работает. Вы все еще можете перетащить ручку прокрутки для прокрутки или щелкнуть в любом месте на дорожке прокрутки, но использование колесика мыши ничего не дает. Он даже не запускает событие.

Я видел, что у других были подобные проблемы, но не нашли обходного пути. У кого-нибудь есть предложения?

Вот класс прокрутки для хорошей меры: http://hastebin.com/xisidogiju.coffee

Ценю любую помощь, которую я могу получить!

Ответы [ 2 ]

1 голос
/ 29 марта 2012

События мыши привязаны к окнам, iframes - окна.Это чудо, это работает в браузерах webkit, как вы говорите.

Вам нужно передать eventListener и, возможно, eventHandler между вашим родительским окном и фреймами, когда мышь перемещается в них.

Некоторая ссылка напередача объектов между iframes: http://www.dyn -web.com / tutorials / iframes / refs.php .

0 голосов
/ 11 апреля 2014

Мне просто удалось преодолеть эту проблему. Вы можете проверить решение, упомянутое в jsfiddle, упомянутом ниже.

http://jsfiddle.net/6nnMV/358/

Здесь я создал событие для прослушивания прокрутки мыши и связал событие с iframe.

Затем можно прокрутить родительское окно или элемент, используя свойство scrollTop, например

$(element).scrollTop($(element).scrollTop+(number of pixels));

Это будет работать, только если iframe, к которому вы обращаетесь, находится в том же домене.

...