Рейтинг:0

how to add javascript to an article?

флаг cn

just installed a stock Drupal 9.2.2 core, trying to create an article with the /node/add/article editor, how do i add javascript to the article? enter image description here

Kevin avatar
флаг in
Вы добавляете его одним из способов, описанных в документации. Вставка его в WYSIWYG (предполагаемый на скриншоте) не рекомендуется и не рекомендуется фильтрацией ввода ядра Drupal.
флаг cn
@Kevin описано в документации, где? я вижу некоторые статьи о том, как добавить javascript в модули или как добавить javascript в темы, но ничего не вижу о том, как добавить их в статьи. думаю, я мог бы сделать некоторые хакерские действия типа «создать специальный модуль только для этой статьи» или что-то в этом роде, но я не видел никакой документации о том, как конкретно добавлять javascript в статьи..?
Kevin avatar
флаг in
https://www.drupal.org/docs/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-module
Kevin avatar
флаг in
Статьи — это просто типы контента. Вы можете реализовать хук в модуле или теме, который прикрепит Javascript из определенной библиотеки к этому типу узла. https://drupal.stackexchange.com/questions/226861/how-to-attach-a-library-to-a-specific-content-type
hotwebmatter avatar
флаг nr
Я заметил, что за это проголосовали против и за. Я думаю, что это правильный вопрос для этого форума. Разработчики приходят в Drupal с самым разным опытом, и тот, кто имеет опыт работы с JavaScript, может не сразу понять, почему WYSIWIG-редактор Drupal находится в такой жесткой изоляции.
Рейтинг:2
флаг nr

Как @Кевин упоминалось в комментариях выше, вы подходите к этому с неправильной точки зрения.

По дизайну ядро ​​Drupal (по крайней мере, начиная с Drupal 5) использует текстовые фильтры и форматы ввода для очистки HTML, добавленного пользователями в редакторах WYSIWIG, таких как CKEditor по умолчанию.

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

С Drupal вы не просто говорите: «Я доверяю себе, добавляя JS в эту статью», вы говорите: «Я доверяю всем пользователям, чьи роли предоставляют им разрешение на использование этого текстового фильтра». Теперь не так просто создать небезопасный текстовый фильтр. Если бы вы это сделали, вы бы хотели ограничить его использование только доверенными пользователями с ролями администратора.

Для опытного друпалиста не составит большого труда присоединить актив JavaScript к массиву рендеринга. Ресурсы CSS и JS управляются в Drupal путем создания библиотеки который можно присоединить к массивам рендеринга Drupal различными способами, используя либо пользовательский модуль, либо пользовательскую тему, либо код PHP, либо шаблоны Twig.

(Если вы создаете сайт на Drupal без пользовательская тема, возможно, вы захотите пересмотреть. Вы можете быстро сделать подтема какой бы ни была ваша текущая тема, чтобы вы могли легко изменять такие вещи, как библиотеки JS и шаблоны Twig.)

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

Этот форум предназначен для ответов на вопросы о ядре Drupal, а не для рекомендаций модулей contrib. Тем не менее, есть относительно новый модуль, который может удовлетворить ваши потребности:

Составная часть

На странице Project модуля Component:

Добавление компонентов JS на ваш сайт Drupal стало намного проще. Просто объедините ваши компоненты JS (любого типа) с *.component.yml и поместите его в свой модуль или тему. Теперь ваш компонент будет доступен в Drupal в виде блока - автоматически!

По общему признанию, это не так просто, как вставить что-то в поле WYSIWYG, но это все равно никогда не сработает (из-за безопасности). Вам все равно нужно будет начать с создания пользовательского модуля, темы или подтемы, чтобы вы могли добавить ваши компоненты JS в компонент.yml файл. Но если вы исходите из мышления разработчика JS, этот подход позволит вам просто написать JS и вставить его в блок на странице.

Обязательное примечание по безопасности:

На этот проект не распространяется политика рекомендаций по безопасности. Используйте на свой риск! Он может иметь публично раскрытые уязвимости.

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

СЛЕДОВАТЬ ЗА: Встроенный JavaScript является разрешено в редакторе Gutenberg из WordPress, поэтому @brown-paul рекомендует использовать Редактор Gutenberg в Drupal, что может быть даже проще для вас, если вы работаете с WordPress.

флаг cn
Спасибо! проверка модуля компонентов. btw ```По общему признанию, это не так просто, как вставить что-то в поле WYSIWYG, но это все равно никогда не сработает (из-за безопасности.)``` - интересное сравнение, WYSIWYG WordPress позволяет это, у него есть что-то, называемое ` Пользовательские блоки HTML, в которые вы можете вставить любой HTML-код, включая javascript.
hotwebmatter avatar
флаг nr
Да, это другая философия. С Drupal вы не просто говорите: «Я доверяю себе, добавляя JS в эту статью», вы говорите: «Я доверяю всем пользователям, чьи роли предоставляют им разрешение на использование этого текстового фильтра». Это _разрешено_ в Гутенберге, и поэтому @brown-paul рекомендует использовать [редактор Гутенберга](https://www.drupal.org/project/gutenberg) в Drupal, что может быть даже проще для вас, если вы исходя из фона WP.
hotwebmatter avatar
флаг nr
@hanshenrik У тебя получилось? Если да, то какой подход вы использовали?
флаг cn
я пошел с редактором Gutenberg; можете ли вы добавить упоминание о Гутенберге в свой ответ?
hotwebmatter avatar
флаг nr
Конечно! Обычно я бы не стал этого делать, потому что другой пользователь предложил это первым, и я не хотел бы красть эту карму у @brown-paul, но поскольку похоже, что он удалил свой ответ, я тоже могу! :)
hotwebmatter avatar
флаг nr
@hanshenrik Я обновил свой ответ, добавив ссылку на модуль Гутенберга :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.