Во-первых, я знаю, что есть много вопросов об этом явлении, но ни один из обходных решений, данных до сих пор, не помог бы в ситуации, в которой я здесь.
Окружающая среда: Мой код находится в Outer iFrame внутри страницы, которую я не контролирую. Он имеет размер, чтобы соответствовать всему моему контенту, поэтому прокрутка не происходит внутри моего iFrame. Скорее, внешняя страница может прокручивать ее вверх и вниз, чтобы просмотреть ее содержимое.
Проблема: У меня есть внутренний iFrame, содержащий сторонние объявления, которые я не могу контролировать. Если внутренний iFrame запускает любую из следующих команд Javascript, внешняя страница прокручивает все вниз, чтобы отобразить внутренний iFrame:
- размытие и фокусировка на элементе внутри него
-
window.location.href или document.location.hash на якорь внутри него.
-
scrollIntoView для элемента внутри него
Вот демо-коллега, собранный (подождите 5 секунд, чтобы он начал)
Решения, которые не работают:
- Если бы я контролировал внешнюю страницу, я мог бы прослушивать событие onScroll и предотвращать прокрутку страницы, если это не было из события мыши или события вверх/вниз. Однако из-за соображений безопасности мой внешний iFrame не может получить доступ к главной странице или предотвратить прокрутку главной страницы вверх или вниз.
- Я мог бы перезаписать все эти Javascript-методы, упомянутые выше, чтобы они не работали, однако объявления в моем внутреннем iFrame фактически создают свои собственные внутренние iFrames, которые имеют эту функциональность и вызывают одну и ту же проблему.
- События не распространяются, и я вижу, что мой iFrame может не дойти до главной страницы. Браузер, кажется, прослушивает непосредственно самую внутреннюю iFrame.