Как добавить iframe со встроенным скриптом в мой проект Next.js?

У меня есть следующий iframe, который нужно добавить в мой проект Next.js.

<iframe
  class = "plot"
  aria-label = "Map"
  id = "datawrapper-chart-${id}"
  src = "https://datawrapper.dwcdn.net/${id}/1/"
  style = "width: 0; min-width: 100% !important; overflow: scroll; flex-grow: 1"
  data-external = "1"
></iframe>
<script type = "text/javascript">
  !(function () {
    "use strict";
    window.addEventListener("message", function (a) {
      if (void 0 !== a.data["datawrapper-height"]) {
        var e = document.querySelectorAll("iframe");
        for (var t in a.data["datawrapper-height"])
          for (var r = 0; r < e.length; r++)
            if (e[r].contentWindow === a.source) {
              var i = a.data["datawrapper-height"][t] + "px";
              e[r].style.height = i;
            }
      }
    });
  })();
</script>

Я попробовал использовать dangerouslySetInnerHTML, и это сработало, но мне интересно, есть ли более «реагирующий» способ сделать это.

Способы ниже не сработали.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вам не обязательно использовать тег сценария, это способ сделать это с помощью реакции.

// components/DataWrapperChart.js

import { useEffect } from 'react';

const DataWrapperChart = ({ id }) => {
  useEffect(() => {
    const handleMessage = (event) => {
      if (event.data["datawrapper-height"]) {
        const iframes = document.querySelectorAll("iframe");
        for (let iframe of iframes) {
          if (iframe.contentWindow === event.source) {
            const height = event.data["datawrapper-height"][id] + "px";
            iframe.style.height = height;
          }
        }
      }
    };

    window.addEventListener("message", handleMessage);

    return () => {
      window.removeEventListener("message", handleMessage);
    };
  }, [id]);

  return (
    <iframe
      className = "plot"
      aria-label = "Map"
      id = {`datawrapper-chart-${id}`}
      src = {`https://datawrapper.dwcdn.net/${id}/1/`}
      style = {{ width: '0', minWidth: '100% !important', overflow: 'scroll', flexGrow: '1' }}
      data-external = "1"
    ></iframe>
  );
};

export default DataWrapperChart;

тогда мы сможем использовать его на какой-нибудь странице вроде этой

// pages/somepage.js

import DataWrapperChart from '../components/DataWrapperChart';

const SomePage = () => {
  const chartId = "your-chart-id";

  return (
    <div>
      <h1>Your Page</h1>
      <DataWrapperChart id = {chartId} />
    </div>
  );
};

export default SomePage;

Другие вопросы по теме