lcestou
(Lutechi)
1
どうやら、メタにスクリプトの注入方法を案内するトピックがあったようですが、削除されたようです。
当初、HTML の投稿から id やクラスがマークダウンによって除去されることを知らず、その後、スクリプトの実行方法が異なることもわかりました。
この CodePen の例を Discourse サイト内で動作させたいと考えていますが、いつものコピー&ペーストでは当然動作しないため、どこから手をつければよいかわかりません。
スクリプトは管理者側からのみ追加できることは理解していますし、実際追加もしました。しかし、トピック内で動作させるには、それ以上の作業が必要だと考えています。
基本的に、これらの外部スクリプトは、特定のデータ属性を持つ div に対してコンテンツを注入するようにトリガーされます。
div にコンテンツを注入するために、外部スクリプト全体を jQuery や Ember で書き直す必要があるのでしょうか?車輪の再発明は避けたいと考えています。
あらかじめありがとうございます。
このリクエストが理解できません。単に返信に投稿するだけで、平均的なユーザーが Discourse に任意の JavaScript を注入できるようにしたいということでしょうか?これはセキュリティ上の悪夢です。
lcestou
(Lutechi)
3
Jeff、迅速な返信をありがとうございます。
一般的なユーザーは外部スクリプトを追加するのではなく、データ属性を持つ div を提供し、それがホワイトリストに登録されて JS 外部スクリプトをトリガーし、該当する div が見つかった際にコンテンツを埋め込む仕組みになっています。
属性付きの div(基本的な HTML)は、一般的なユーザーが投稿する際にエディターで既にサポートされ、受け入れられているはずです。私が管理者だから基本的な HTML も使えるが、他のユーザーにはそれができないのでしょうか?
他の大規模サイトである Wowhead や Icy Veins は、これらのスクリプトをユーザー向けに使用していますが、彼らもリスクにさらされているのでしょうか?
引き続きご支援いただき、ありがとうございます。
つまり、JS は不要で、
<div attribute='blah'>
が欲しいのですね。ご質問の趣旨に合うよう、トピックのタイトルを編集します。個々の HTML 属性を任意にホワイトリスト登録できるかどうかは確信が持てません。
ただし、サイト設定で <iframe> のドメインをホワイトリスト登録することで、同様の結果を得られる可能性があります。
Falco
(Falco)
5
Meta 検索で「wowhead」と検索すると、以下が見つかります。
ここでは、ゲームデータベースとの投稿統合のいくつかの例を紹介しています。
達成したい具体的な例はありますか?
lcestou
(Lutechi)
6
ジェフ、ありがとう。以前は iframe をホワイトリストに登録できたのですが、それは私が探している動作ではありません。
ラファエル、こんにちは。
私の説明が下手だったのかもしれません。この投稿に例があります:
そのリンクの私の投稿の下部に「Loading」と表示されています。これは特定の属性を持つ div で、管理テーマの /body セクション(スクリプトを配置する場所)に設置した外部スクリプトをトリガーし、JavaScript を介してコンテンツ(統計バーで埋められた状態)を生成するものです。
最終的には、このトピックの上部にリンクした CodePen のように、データが生成された時点で表示されるはずです。
カスタム data 属性は Discourse でデフォルトでホワイトリストに登録されており、id や class が削除されるように div から削除されることはありません。
私の問題は、これらの外部スクリプトを実行し、属性に基づいてこれらの空の div の内部でデータを生成する方法です。これらの属性に基づいて、トピックや投稿ごとに異なるデータを生成し、外部スクリプトによって生成された異なるデータを表示するスクリプトをトリガーできます。
私が行おうとしていることの要約
管理 > カスタマイズ > テーマ「CSS/HTML の編集」 セクションに配置された外部スクリプト:
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://bloodmallet.com/js/bloodmallet_chart_import.min.js"></script>
ユーザーまたは私によるエディタへの入力:
<div
data-bloodmallet="chart"
data-wow-class="shaman"
data-wow-spec="elemental"
data-chart-engine="highcharts"
data-tooltip-engine="wowhead"
data-type="trinkets"
data-azerite-tier="all"
data-fight-style="patchwerk"
data-entries="7"
data-background-color="#343a40"
data-font-color="#f8f9fa"
data-axis-color="#828282"
data-language="en"
>Loading...</div>
div が検出され、外部 JavaScript(管理側で配置したスクリプト)が実行され、それらの data 属性に基づいてコンテンツを生成するようにトリガーされたときの出力:
私の意図は伝わっていますか?バイリンガルであるため、説明が下手で、物事をより複雑に聞こえるようにしてしまうことがありますが、ご容赦ください。
j.jaffeux
(Joffrey Jaffeux)
7
lcestou
(Lutechi)
8
ジョフリーさん、こんにちは。
はい、ありがとうございます。コードの一部を読み、理解しようと試みました。どこまで進められるか見てみます。
再度、ありがとうございます。
j.jaffeux
(Joffrey Jaffeux)
9
ちょうど気づいたのですが、これについて書いたことがありませんでした。Generic bbcode wrapper for theme components は、あなたのユースケースに非常に役立つかもしれません。