Выполнить JavaScript из MD - страница, созданная программно - PullRequest
1 голос
/ 13 июля 2020

Можно ли выполнить JavaScript на странице, программно созданной MarkdownRemark из .md?

Я бы хотел встроить фотогалерею из EmbedSocial, для которой требуется наличие класса с именем класса и тегом прямо под ним .

Вот он в файле .md:

<div class='embedsocial-album' data-ref="abcdefghijklmnopqrstuv123456789"></div>
<script>(function (d, s, id) { var js; if (d.getElementById(id)) { return; } js = d.createElement(s); js.id = id; js.src = "https://embedsocial.com/embedscript/ei.js"; d.getElementsByTagName("head")[0].appendChild(js); }(document, "script", "EmbedSocialScript"));
</script>

И вот он в моем файле шаблона, принимая результаты запроса GraphQL:

<div dangerouslySetInnerHTML={{ __html: post.html }} />

но я понял, что dangerouslySetInnerHTML не выполняет JavaScript из MD.

Как мне подойти к этому?

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Я бы предложил использовать gatsby-comment-embed-snippet для этого варианта использования. Затем вы можете включить галерею, например, `embed:embedsocial.js` и поместить свой код в файл с именем embedsocial.js, который является частью вашей кодовой базы.

Возможность включить JavaScript прямо на страницу из звуков Markdown как угроза безопасности (любой, кто контролирует Markdown, может внедрить код на ваш сайт); иметь заранее определенный фрагмент намного безопаснее.

Более того, если EmbedSocial изменит свой API в будущем, вы можете обновить все экземпляры галереи в одном месте.

0 голосов
/ 16 июля 2020

принимая @ehrencrona информацию об угрозе безопасности (совершенно забыл об этом), я просмотрел сценарий embedsocial, который на самом деле просто добавил тег в заголовок HTML. С помощью response-шлема я добавил тег скрипта, но только для страницы шаблона, а не для всего приложения.

...