How to override a method in post-cooked.js.es6 in a plugin?

Hi,

I’d like to customize the reply/embedded-post. This requires a modification to the _computeCooked method in post-cooked via a plugin; essentially when this.attrs.embeddedPost is true, render something else.

I noticed it’s easier to override or reopen ‘conventional’ Ember classes or the widgets created using ‘createWidget’. What would be the best way to achieve this for the PostCooked class?

Вам удалось найти решение этой проблемы? Буду очень рад, если вы поделитесь им.

Разве api.decorateCooked недостаточно?

Я не уверен. Я ещё не изучал это. Я хочу заменить
discourse/app/assets/javascripts/discourse/app/widgets/post-cooked.js at eab560fe2aa9053f6d227d29ec6c1ad0939ea940 · discourse/discourse · GitHub
_computedCooked в зависимости от категории.
Я хочу заменить

cookedDiv.innerHTML = this.attrs.cooked;

на пользовательский контент в зависимости от категории. Но это имеет смысл. Это также должно быть возможно с помощью decorateCooked. После небольшого изучения кажется, что decorateCookedElement может быть подходящим вариантом, так как я не хочу использовать jQuery. Спасибо :smiley:

После дня блужданий я наткнулся на этот ответ.

Похоже, это была напрасная трата времени, и мне нужно выбрать другой путь.

Когда я присваиваю elem.innerHTML значение &lt;script&gt;alert(1)&lt;/script&gt;, оно становится неэкранированным: <script>alert(1)</script>. (Я замечаю это, когда ввожу это в редакторе: если ввести неэкранированный код, он исчезнет в предпросмотре.) Это проблема, или CSP это остановит?

https://meta.discourse.org/t/mitigate-xss-attacks-with-content-security-policy/104243!csp error|690x191

Посты, содержащие теги <script> в качестве части объяснения, также, похоже, вызывают эти ошибки CSP. Я сейчас в полном замешательстве. Нужно ли мне вообще беспокоиться о сохранённых XSS-атаках, или CSP просто заблокирует их? В редакторе я использую CKEditor, который предотвращает self-XSS. Если мне всё же нужно беспокоиться, похоже, мне нужно удалять небезопасные теги. В данный момент я делаю так:

  value = Loofah.fragment(value).scrub!(:escape).to_s

Но, похоже, это не даёт никакого эффекта, потому что при присваивании этого значения elem.innerHTML HTML-сущности просто раскрываются.

РЕДАКТИРОВАНИЕ: Наконец, я нашёл источник своего замешательства: функция «Inspect Element» не показывает настоящий HTML — она уже преобразует HTML-сущности.

Если кликнуть «Edit as HTML» в инспекторе, становится ясно, что на самом деле всё в порядке. Тот факт, что рендерятся невидимые теги, должен был уже указать мне в этом направлении.