Работает ли Intersection Observer внутри междоменного iframe по отношению к области просмотра? - PullRequest
1 голос
/ 17 марта 2020

Есть ли способ определить изнутри междоменного iframe, виден ли iframe или нет? Я пытался добиться этого с помощью Intersection Observer API. Но, похоже, он работает только для iframe с одним доменом, а не для междоменного. Я проверил документацию API Intersection Observer (как для MDN , так и для W3 C), но не смог найти ничего, связанного с этим. Я надеюсь, что здесь ничего не пропущено.

Вот пример кода

Main Html Страница

<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Main Page</title>
</head>

<body>
    <div style="margin:700px auto;text-align:center;">
        <iframe marginwidth="0" marginheight="0" frameborder="0" height="250px" width="300px"
            id="aax_if_aax_sidebar-btf-1" allowtransparency="true" src="http://127.0.0.1:8080/iframe.html"></iframe>
    </div>
</body>

</html>

Встроенная страница Iframe

<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Iframe</title>
</head>

<body>
    <div id="abc" style="background-color: black;width:100%;height: 100%;"></div>
    <script>
        setupIntersectionObserver = function (adContainer) {
            console.log('setting up observer', observer);
            var observer = new IntersectionObserver(
                function (entries) {
                    console.log('observer triggered', entries);
                },
                {
                    root: null,
                    rootMargin: '10px',
                    threshold: 0
                }
            );
            observer.observe(adContainer);

        };

        setupIntersectionObserver(document.getElementById('abc'))
    </script>
</body>

</html>

Если я запускаю главную страницу локально, тогда наблюдатель пересечения внутри iframe работает, только если страница просматривается с использованием 127.0.0.1:8080, а не для localhost:8080 (междоменный)

Имеет ли Intersection Observer работает внутри междоменного iframe относительно окна просмотра?

1 Ответ

2 голосов
/ 24 марта 2020

Я не верю, что существуют какие-либо ограничения для перекрестных источников IntersectionObservers, однако в моем понимании они не должны иметь явного набора root. В вашем случае это будет означать удаление root: null из конфигурации IntersectionObserver в подкадре.

Важно отметить, однако, что указанное вами значение rootMargin не будет действовать в случае перекрестного источника в соответствии с W3 C применяется только "для целей, принадлежащих к той же единице связанных контекстов просмотра аналогичного происхождения".

Возможно, вам также потребуется явно переключить ваш JavaScript контекст в dev инструменты для подкадра, чтобы увидеть сообщение журнала. Пример в Chrome Dev Tools.

Этот вариант использования наверняка поддерживается WebKit & Blink, поскольку они автоматизировали тестирование специально для перекрестного источника IntersectionObserver: страница основного фрейма , страница подкадра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...