Подтвердить что ты не робот

Как получить scrollTop iframe

jQuery scrollTop возвращает значение null, когда окно является iframe. Кто-нибудь мог выяснить, как получить scrollTop iframe?

Дополнительная информация:

my script работает в самом iframe, родительское окно находится в другом домене, поэтому я не могу получить доступ к идентификатору iframe или что-то в этом роде

4b9b3361

Ответ 1

Вы можете установить scrollTop с помощью этой настройки:

$("html,body").scrollTop(25);

Итак, вы можете попробовать сделать это следующим образом:

$("html,body").scrollTop();

Поскольку разные браузеры устанавливают scrollTop для разных элементов (body или html).

Из плагина scrollTo:

Но это, вероятно, все еще не работает в некоторых браузерах. Вот соответствующий раздел из исходного кода Ариэль Флешер scrollTo плагин для jQuery:

// Hack, hack, hack :)
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
$.fn._scrollable = function(){
  return this.map(function(){
    var elem = this,
      isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;

    if( ! isWin ) {
      return elem;
    }


    var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;

     return $.browser.safari || doc.compatMode == 'BackCompat' ?
       doc.body : 
       doc.documentElement;
  });
};

Затем вы можете запустить:

$(window)._scrollable().scrollTop();

Чтобы определить, как далеко прокручивается iframe.

Ответ 2

$('#myIframe').contents().scrollTop()

Ответ 3

Я нашел этот вопрос, пытаясь установить scrollTop внутри iframe... не совсем ваш вопрос (вы хотели GET), но здесь решение внутри iframe для людей, которые также здесь пытаются установить SET.

Если вы хотите прокрутить до верхней части страницы , это НЕ будет работать внутри iframe:

$("html,body").scrollTop(0);

Однако это будет работать:

document.getElementById("wrapper").scrollIntoView();

Или equivalent с jQuery:

 $("#wrapper")[0].scrollIntoView();

Для этой разметки (содержится внутри iframe):

<html>
  <body>
    <div id="wrapper">
      <!-- lots of content -->
    </div>
  </body>
</html>

Ответ 4

Хороший старый javascript:

scrollTop = document.getElementById(IFRAME_ID).contentWindow.document.body.scrollTop;

Ответ 5

$('#myIframe').contents().scrollTop(0);

Работает только с "0" в качестве параметра

Ответ 6

Я пытаюсь

$('#myIframe').contents().scrollTop(0);

и

 let scrollTop = document.getElementById(IFRAME_ID).contentWindow.document.body.scrollTop;

первая функция успешной работы в настольном браузере. не работает в мобильном браузере. поэтому я использую другую функцию с scrollIntoView

$("#ButtonId").click(function() {
        var win = document.getElementById(IFRAMEID).contentWindow;
        var scrollTop = win.document.documentElement.scrollTop || win.pageYOffset || win.document.body.scrollTop;
        // scrollTop can getted
        if (scrollTop) {
            win.document.documentElement.scrollTop = 0;
            win.pageYOffset = 0; // safari
            win.document.body.scrollTop = 0;
        } else {
            win.document.body.scrollIntoView(true); // let scroll to the target view 
        }
    });

scrollIntoView() представление в scrollIntoView - MDN

Ответ 7

или используйте этот

sample.showLoader = function() {
// show cursor wait
document.getElementsByTagName('body')[0].style.cursor = 'wait';
var loader = $('#statusloader');
// check if we're runnign within an iframe
var isIframe = top !== self;
if (isIframe) {
    var topPos = top.pageYOffset + 300;
    // show up loader in middle of the screen
    loader.show().css({
        top : topPos,
        left : '50%'
    });
} else {
    // show up loader in middle of the screen
    loader.show().css({
        top : '50%',
        left : '50%'
    });
}
};

Ответ 8

Я знаю, что я опаздываю к игре здесь, но я пытался понять это для длинного списка на мобильном телефоне. scrollTop() не работал у меня из-за междоменных конфликтов (и у меня не было доступа к родительскому окну), но изменение высоты делало:

$('#someClickableElementInIFrame').on('click', function(e){
      $("html body").animate({
      'height' : "0"
    }, {
        complete: function(){
          $("html body").css({
            'height' : "auto"
            })
          }
      })
});

Ответ 9

Поскольку вы используете iFrame, вам нужно будет использовать его с событием "сообщение" Windows

Подробнее читайте здесь Информация

С видом на ребенка (Iframe)

window.top.postMessage(0 + '$' + 'form-iframe-top', "*");

В представлении родителей

   window.addEventListener("message",function(e) {
       if (e && e.data && typeof e.data == "string" && e.data != undefined) {
         var data = e.data.split("$");
             if (data.length == 2) {
               var scroll_height = data[0], iframe_id = data[1];
               if(iframe_id=="form-iframe-top"){
                   window.scrollTo(0,scroll_height);
                   return;
                  }
               }
          }
         },
        false
      );

** Обратите внимание, я использовал "*" в качестве разделителя, вы можете использовать все, что угодно