はい、まだ Discourse で広告サーバーを表示させるための取り組みを続けています。ここで、どうにも解決できない謎に遭遇しました。テーマ編集機能を使って、スクリプトのリクエストを <body> と「フッター」の両方に追加しました。
フッター(または「ヘッダー後」)に追加すると、コードが機能しません。 inspection モードでは、エンコードされたテキストが正しいように見えるのにです。以下をご覧ください:
「Where is this?」というテキストは表示されますが、それ以外は何も表示されません。
しかし、同じスクリプトリクエスト(以下)を <body> に追加すると動作します。なぜでしょうか?
<script language="Javascript" src="https://adserver.kitmaker.net/index.php?section=serve&action=1">
これを「House Ads」のデータフィールドに追加しても試してみましたが、やはりテキストはページ上のエンコードされたデータの一部として存在するものの、何も表示されません。
creatives\":{\"Leaderboard Ad\":\"<script language=\"Javascript\" src=\"https://adserver.kitmaker.net/index.php?section=serve&action=1\">\"}},\"
また、Adsense の広告単体でもまだうまく動作させられていません。もしかすると相手側の問題で、まだサイトをスキャンして何を掲載すべきか確認していないのかもしれません。しかし、こんなに時間がかかるのは奇妙ですね。
どなたかご助力いただけますと幸いです。
Jim
モデレーターの方にご依頼したいのですが、このトピックを「サポート」または適切なカテゴリに移動していただけないでしょうか。現在、カテゴリが未設定のままです。
ご協力ありがとうございます。また、このような催促をしてしまい申し訳ありませんが、デプロイの期限が迫っており、この問題を解決する必要があります。
CSP ログに Google 広告スクリプトがブロックされていると表示されていたため、以下のドメインを CSP の script-src リストに追加しました。
https://pagead2.googlesyndication.com
すると、Google AdSense の広告が表示されるようになりました(AdSense プラグインがインストールされていても、まだこれを行う必要があるとは驚きです)。ただし、私が気づいたのは、House Ads を 100% に設定(つまり、スクリプトのみが呼び出される状態)した場合、CSP には何も問題の通知が来ないということです。これでは再び混乱してしまいます。House Ad のコードは HTML 内にエンコードされており、ブラウザの検査ビューでは上記のように表示されます。
何か出力をブロックしているが、CSP の警告はトリガーしない要因があるのでしょうか?
出力は document.write を使用して広告スペースを作成しています。これが原因ではないかと推測しています。出力は以下のようになります。
笑えますが…スクリプトの出力をここにテキストとして貼り付けると、問題なく生成されていました。しまった…
同様の問題について投稿を見つけましたが、その方は自分で解決しており、私よりも明らかに JavaScript に詳しいようです。
Summary
Have created a draft of a revive ad server plugin based on a subset of code from the official discourse ad plugin. Basically, I removed the ad networks and refactored the house-ad code (all documented in the README) to serve tags from our revive ad server, filtering for either desktop or mobile ads (Revive does not support responsive tags yet). Here this the current redesign:
Status:
Issue with rendering <script> tags (sync and async), but works fine with <iframe> tags
TODO:
Fi…
彼と同じく、この件について誰かに有料でサポートを依頼する用意があります。
よろしくお願いいたします、
Jim
つまり、これはすべて CSP(コンテンツセキュリティポリシー)に関連する問題(私はそう推測します)で、サイトが「unsafe-inline」データに設定されており、変数を含む URL で広告サーバーのスクリプトを取得しようとしています。なんて野蛮な方法でしょうか。
さて、どなたかいますか?これに対する簡単な解決策はあるでしょうか、それともあきらめるべきでしょうか?
Falco
(Falco)
2020 年 12 月 7 日午後 8:04
6
適切な修正方法はインラインを使用せず、既存の EmberJS テンプレートのアウトレットにフックするように書き換えることです。応急処置として、カスタム広告ソリューションの変更を進める間は、サイト設定で CSP を無効にすることもできます。ただし、これにより XSS のリスクにさらされる可能性がある点にご注意ください。
また、以下のプルリクエストのように、広告プラグインのフォークにサーバーを追加する方法を検討することもできます:
master ← communiteq:master
merged 06:26PM - 16 Sep 19 UTC
master ← barreeeiroo:master
merged 03:54PM - 15 Apr 19 UTC
This PR adds Carbon Ads support to Discourse-AdPlugin
```
CARBON ADS GUIDE… LINES
There can be only one ad per page.
The ad should be visible above-the-fold (upper 800 pixels) for desktop browser.
The ad should be visible within 3x of the mobile viewport height, starting from the top of the mobile browser.
The ad tag should be placed exactly where you'd like the ad to display.
The ad image must remain 130 × 100 pixels, unmodified and unobscured.
The ad text is up to 80 characters in length and must be clearly visible.
```
To comply with this, there are only two possible locations for the ad: above topic lists and above posts stream.
---




master ← gitcoinco:feature/add-codefund
merged 07:23PM - 20 Jun 18 UTC
I have been talking with @erlend-sh on building up a plugin to display ethical a… ds from CodeFund in Discourse. I found that the cleanest way was to include it in this plugin.
Here's a Property ID you can test with: `51b2fb2d-92c0-4c1a-b60b-825eb76e2a2f`
Here's a screenshot of one of the ads:

Thanks!
また、コンテンツセキュリティポリシー(CSP)はどこで宣言されていますか?それに対応するメタタグは見当たりません。これは、各ブラウザがデフォルトで HTML5 の設定を適用しているだけでしょうか?
Falco
(Falco)
2020 年 12 月 7 日午後 8:06
8
Falco さん、ありがとうございます。すべての保護を無効にするのではなく、adserver の URL に対してのみデータ文字列をホワイトリストに登録し、それらの変数を通過させる方法はありますか?あるいは、「unsafe-inline」データの要件を無効にする方法はありませんか?
残念ですが、リンクされた記事にはそのオプションについての記載が見当たりませんでした。
再度、ありがとうございます。
まあ、私が切羽詰まっているに違いないな。CSP を完全に無効にしようとしたのだから。
それでも、広告はサイトのメインセクションには表示されず、テーマの </body> に設置されているフッター部分にしか表示されない。中央部分には <noscript> ラッパーがあることに気づいたが、フッター側のコードは </noscript> の閉じタグの外にある。それが原因かもしれない。
Firefox で確認したところ、コンソールには CSP の警告は表示されなくなった。なぜ最初から Chrome で警告が表示されなかったのかはわからない。
Falco
(Falco)
2020 年 12 月 8 日午後 7:43
11
Discourse はシングルページアプリケーションであり、すべてのページマークアップは当社の EmberJS アプリケーションを介してクライアント側で生成されます。
document.write のような直接 DOM 操作を使用することは、この仕組みと完全に矛盾しており、「そのまま動作する」可能性は極めて低いです。
公式アドプラグインのハウス広告 システムを広告システムに適用することをお勧めします。ハウス広告の在庫に単一の広告を配置し、ページ変更フック を使用して広告サーバーに接続し、レスポンスで広告を置き換える方法はいかがでしょうか?あるいは、広告システムが API を介して直接ハウス広告の在庫に書き込むことも可能かもしれません。
お助けいただきありがとうございます、Falco さん。少し怖いですね。この広告サーバーのコードベースは、API という用語が生まれる前に書かれたものでしたから……そうですね、最初から全く新しい広告サーバーシステムを書き直す方が私にとっては良い選択かもしれません。ただ、今すぐその時間はありません。新しいフォーラムと 6 つ以上の新しいコンテンツサイトを同時に展開しているためです。
document.write を使わない別のオプションをいくつか試してみて、それが機能するかどうか確認してみます。
では、
Jim