#javascript #custom-element
Вопрос:
У меня есть приложение, в котором я загрузил несколько пользовательских элементов (через файл js), добавил iframe и загрузил страницу внутри iframe.
Можем ли мы скопировать все пользовательские элементы внутри окна рамки без добавления ссылки на файл js пользовательских элементов?
Ответ №1:
customElementsRegistry
Это глобальный объект окна- IFrame-это еще одно окно
Таким образом, они не используют общие элементы реестра/Пользовательские элементы
В настоящее время ведется обсуждение реестров с ограниченной областью действия
https://github.com/WICG/webcomponents/issues/716
Но это больше касается нескольких реестров в одном окне/документе
Маловероятно, что ваш сценарий IFrame будет рассмотрен;
Так что просто добавьте свой elements.js
в HTML-файл, загруженный в IFrame
Комментарии:
1. Я хотел избавиться от element.js файл, так как он уже доступен в родительском окне. пусть logo = window.parent.customElements.get(«мой логотип»), сопоставляя это с окном iframe : window.customElements.define(«мой логотип», логотип); это правильный путь ?
2. Вы чрезмерно усложняете и создаете зависимости, которые вам придется поддерживать в будущем… Браузер уже загрузился
element.js
, поэтому повторное использование его в IFrame вряд ли может иметь последствия. Думайте о своих компонентах как об изображениях.. вы не собираетесь прыгать через обручи и читать свой [Логотип компании] из разных мест. Это то, что вы хотите сделать сейчас.. вместо определения компонента из его исходного источника, теперь вы хотите, чтобы источником было родительское окно. ПОЦЕЛУЙ — Будь Проще С….3. В настоящее время я добавляю файл js на каждую страницу, но меня беспокоит то, что, поскольку он уже доступен в родительском winow, дочернее окно может создавать необходимые элементы во время выполнения, так что все страницы не нужно загружать целиком elements.js который больше по размеру, и я могу сэкономить время на подключении.
4. Нет, вы запрашиваете свой «базовый класс» только из другого источника.. и я бы не удивился, что на самом деле это медленнее, чем повторный запрос файла.. потому что этот файл кэширован и уже обработан браузером … точно так же, как он обрабатывает один и тот же URI изображения (или любого файла).. репликация такого поведения путем вызова механизма JavaScript всегда будет происходить медленнее. Еще раз.. относитесь к вашему
element.js
файлу изображения как к вашему [логотипу компании].. вы также используете тот же URI (я надеюсь).. вы не вызываете родительское окно (где используется логотип) и не загружаете двоичные данные IMG в свои IFrames.