Определить высоту внешнего источника контента iFrame с сайта JS - PullRequest
0 голосов
/ 23 марта 2019

Я унаследовал несколько JS, которые определяют высоту содержимого iFrame с другого веб-сайта. iFrames не очень хороши для манипулирования контентом в iFrame с веб-сайта, это не совсем возможно.

Содержимое iFrame в моем примере работает отлично, это действительно длинная одностраничная форма, которая загружается как источник iFrame с другого веб-сайта (я не могу предоставить источник iFrame, но могу сказать, что источник не на том же домене, что и реальный веб-сайт, загружающий iFrame).

Я пытаюсь понять две вещи:

  1. Как это может прочитать исходный код iFrame и получить высоту.

и ... 2. Насколько надежен этот код в старых браузерах и существует ли альтернативный подход?

Приведенный ниже код работает сейчас: ему каким-то образом удается определить содержимое источника iFrame независимо от его источника и вывести целое число, которое я затем преобразовываю в пиксели, чтобы затем установить высоту iFrame через мой веб-сайт.

HTML

<div class="banner-page">
    <iframe id="iframe" class="position-relative" src="https://externalwebsite.com/application-form" width="100%" frameborder="0" scrolling="no"></iframe>
  </div>

JS (который получает высоту формы заявки из источника)

// Create IE + others compatible event handler
    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"
    var eventer = window[eventMethod]
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"

    // Listen to message from child window
    eventer(messageEvent,function(e) {
        var str = e.data.toString()
      var pageHeight = e.data
      document.getElementById("iframe").style.height = pageHeight + 'px';
    }, false)

Приведенный выше код работает, я хочу получить совместное мнение о том, насколько это надежно в старых браузерах и как еще я могу это изменить,

кроме того, мне интересно, есть ли способ предоставить запасное решение для общего количества пикселей, если код не работает.

Большое спасибо:)

1 Ответ

0 голосов
/ 23 марта 2019

Как это может прочитать исходный код iFrame и получить высоту.

Это не так.Чтение высоты содержимого кадра в другом источнике запрещено той же политикой происхождения.

JavaScript на странице в рамке отвечает за определение высоты страницы.Затем он использует postMessage для отправки этой информации слушателю на родительской странице.

Насколько надежен этот код в старых браузерах

Могу ли я использовать перечисляет поддержку браузером соответствующих функций.

и есть ли альтернативный подход?

Угадай.

Мне интересно, есть ли способ, которым я мог бы предоставить запасное решение для общего числа пикселейесли код не работает.

Просто установите значение по умолчанию в вашей таблице стилей.

Если прослушиватель сообщений не запускается, JavaScript для обновления высоты никогда не запустится,поэтому он не переопределяет значение по умолчанию.

Если он выполняется, то значение по умолчанию переопределяется.

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