Как я могу обойти window.scroll, не работающий в iFrame на Android

window.scroll и window.scrollTo (его псевдоним), похоже, не работают в <iframe>, встроенном в интернет-браузер Android 4.0.4< /а>. Ни одна из других функций (кажется), таких как window.scrollBy и т. д. Как я могу обойти это ограничение и заставить <iframe> прокручивать до определенной позиции на странице?

Некоторая дополнительная информация:

  • Решение не обязательно должно быть элегантным, оно может быть хакерским. В любом случае это тестовый код.
  • Хотя код не обязательно должен быть чистым, по крайней мере должна быть возможность сделать его кроссбраузерным.
  • Устройство представляет собой Samsung Galaxy Note с собственным браузером Android 4.0.4.
  • Фрейм находится в том же домене, поэтому на нем можно запускать код.
  • Помимо прокрутки, я хочу оставить страницу как можно нетронутой.
  • <iframe> закончил загрузку к моменту запуска моего кода

person LoveAndCoding    schedule 30.07.2013    source источник
comment
element.scrollIntoView() все еще должен работать. о, и это document.documentElement.scrollTop, document.body.scrollTop, а не window.scroll   -  person dandavis    schedule 30.07.2013
comment
Вы запускаете код внутри iframe или с родительской страницы?   -  person AndrewK    schedule 30.07.2013
comment
@dandavis .scrollIntoView() тоже не работает. Кроме того, window.scroll — это функция, отличная от настройки scrollTop (которая немного отличается в разных браузерах).   -  person LoveAndCoding    schedule 30.07.2013
comment
@AndrewK Кажется, ни один из них не работает, но я буду запускать его с родительской страницы.   -  person LoveAndCoding    schedule 30.07.2013
comment
Какой элемент вы пытаетесь прокрутить? Ядро WebKit не любит прокручивать <body> (иногда).   -  person Pointy    schedule 30.07.2013
comment
@Pointy Я использую window.scroll, поэтому window/body/documentElement (в зависимости от того, что применимо для webkit, я думаю, что это documentElement)   -  person LoveAndCoding    schedule 30.07.2013
comment
возможно, вам нужно определить загружаемый iframe, а затем использовать scrollTo   -  person Alex Garulli    schedule 07.08.2013
comment
@AlexGarulli Это именно то, что я делаю, и это именно то, что не работает. Это то, что я пытаюсь обойти.   -  person LoveAndCoding    schedule 07.08.2013
comment
возможно, это ... помогло бы blog.futtta.be/2010/03/03/   -  person Alex Garulli    schedule 07.08.2013
comment
возможно -webkit-overflow-scrolling: touch; ?   -  person Alex Garulli    schedule 07.08.2013


Ответы (2)


Используйте 1_?

function scrollY(i) {
  var div = document.createElement("div");
  div.innerHTML = "<a style='position:absolute;left:0;top:" + i + "px' href='#'></a>";
  div = div.firstChild;
  document.body.appendChild(div);
  div.focus();
  div.parentNode.removeChild(div);
}
person Kernel James    schedule 08.08.2013

Похоже, известная ошибка обсуждается здесь и здесь .

Следующее помогло мне:

  • Отключите стиль переполнения, добавив {overflow:hidden}
  • Вызов scrollTo
  • Включите стиль, установив {overflow:scroll}
person Andrey    schedule 08.08.2013
comment
Спасибо, что указали мне на ошибку. Я такого нигде не нашел. Я попробовал ваше предложение, но, похоже, оно не работает ни с window, ни с documentElement, ни с body. :( Если то, что вы примеряли, было окном, не могли бы вы поделиться своим кодом? Спасибо. - person LoveAndCoding; 09.08.2013
comment
Я использовал его на div. Что, если вы попытаетесь использовать div внутри iFrame и прокрутить его, используя трюк, о котором я упоминал. - person Andrey; 09.08.2013
comment
Как я уже сказал в своем вопросе, я хочу оставить страницу как можно более неизменной. Оборачивать страницу в <div> для ее прокрутки, особенно только для этого браузера, к сожалению, для меня не вариант. Это тестирование кода для страницы, поэтому прокрутка действительно должна быть единственной серьезной модификацией, если с ней можно помочь. - person LoveAndCoding; 09.08.2013