scrollTop для iframe в iOS Safari всегда 0 - PullRequest
0 голосов
/ 25 марта 2019

Может кто-нибудь посоветовать, как получить значение scrollTop (которое является позицией прокрутки) iframe в iOS Safari? Мне нужно знать значение scrollTop, чтобы можно было определить, прокрутил ли пользователь нижнюю часть фрейма.

В других браузерах (например, Chrome и даже настольном Safari) я легко могу получить scrollTop iframe, используя любую из следующих строк кода (при условии, что iframe имеет ссылку на iframe):

iframe.document.documentElement.scrollTop
iframe.document.body.scrollTop
iframe.contentDocument.scrollingElement.scrollTop // Not sure if this one works
event.srcElement.documentElement.scrollTop

В iOS Safari (по крайней мере, в симуляторе) первые три всегда равны 0 (независимо от положения прокрутки), а последняя недоступна.

Вот пример кода, пытающегося достичь этого:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>Playground</title>
</head>
<body>
    <h1>Dev playground</h1>
    <div class="iframe-wrapper">
        <iframe
            src="index2.html"
            class="iframe"
            id="iframe"
        ></iframe>
    </div>
    <script src="index.js"></script>
</body>
</html>

style.css

.iframe-wrapper {
    height: 200px;
    width: 90%;
    -webkit-overflow-scrolling: touch;
    overflow-y: scroll;
    border: 5px solid black;
}

.iframe {
    width: 100%;
    height: 100%;
    border: none;
}

index.js

const iframe = document.getElementById('iframe')
iframe.onload = () => {
    console.log('iframe loaded')
    const doc = iframe.contentDocument
    if (doc) {
        doc.onscroll = onScroll
        doc.ontouchend = onScroll
    }
};

function onScroll(e) {
    console.log(
        'iframe.contentWindow.document.documentElement.scrollTop',
        iframe.contentWindow.document.documentElement.scrollTop,
        'iframe.contentWindow.pageYOffset',
        iframe.contentWindow.pageYOffset,
        'iframe.contentWindow.document.body.scrollTop',
        iframe.contentWindow.document.body.scrollTop,
        'iframe.contentDocument.scrollingElement.scrollTop',
        iframe.contentDocument.scrollingElement.scrollTop,
        'e.srcElement.documentElement.scrollTop',
        e.srcElement.documentElement.scrollTop,
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...