Лучший способ внедрить HTML / CSS на веб-страницу?

#javascript #html #css #google-chrome-extension

#javascript #HTML #css #google-chrome-расширение

Вопрос:

У меня есть расширение Chrome, которое внедряет HTML / CSS на страницы поиска Google из скрипта содержимого.

В настоящее время я делаю это с помощью insertAdjacentHTML() и длинной одиночной строки HTML.

Соответствующие фрагменты кода:

 const chosenElements = document.getElementsByClassName('r');

for (var i = 0; i < chosenElements.length; i  ) {
    chosenElements[i].insertAdjacentHTML('afterbegin', createHTML(name));
}

  
 function createHTML(name) {
  return (
    '<a style="display: flex; justify-content: center; .... font-weight: 500;" href="https://www.mywebsite.com/">Click here to go to '  
    name  
    ' website</a>'
  );
  

Это делает правильную вещь и добавляет HTML / CSS на страницу, но для меня это довольно непрактичный способ сделать это, поскольку я хочу значительно расширить HTML и CSS вводимого контента, а делать это в одной большой строке, как это, на самом деле не сработает.

Есть ли лучший способ выполнить это внедрение?

Подумываю о чем-то вроде ссылки на отдельный HTML-файл, который имеет свой собственный стиль CSS-файла, или о чем-то подобном.

Спасибо.

Ответ №1:

Проверьте строки шаблона. Они довольно хорошо поддерживаются по всем направлениям (могу ли я использовать) и на 100% поддерживаются в Chrome.

Для создания строки используются обратные символы вместо кавычек или одиночных кавычек, а также простая интерполяция.

 function createHTML(name) {
  return (
    '<a style="display: flex; justify-content: center; .... font-weight: 500;" href="https://www.mywebsite.com/">Click here to go to '  
    name  
    ' website</a>'
);
  

становится

 function createHTML(name) {
  return (
    `<a style="display: flex; justify-content: center; font-weight: 500;"
        href="https://www.mywebsite.com/">
       Click here to go to ${name} website
     </a>` 
);
  

У вас по-прежнему будет весь ваш код в одном файле, но его будет намного проще использовать. Надеюсь, это поможет!

Комментарии:

1. Ах да, я все время забываю использовать строки шаблона, переключился на их использование вместо использования одинарных кавычек, спасибо. Как вы думаете, это единственный способ сделать это? Нет способа использовать отдельный HTML-файл?

2. @chivs688 Я не могу придумать хорошего способа использовать отдельный HTML-файл. Вы могли бы попробовать разбить свои JS-файлы на файлы «шаблонов» и включить несколько <script src> тегов, или, если вы используете что-то вроде Webpack, использовать импорт.

3. @ Я только что поиграл с использованием iframe для загрузки локального html-файла, и, похоже, это сработало!

4. @chivs688 Я имею в виду, конечно, вы могли бы также выполнить fetch или XHR-запрос для разделения кода (я думаю, это должно работать в расширениях Chrome), но я бы не обязательно рекомендовал это. На самом деле ничего плохого, просто дополнительные запросы. Iframe работает так же