クライアント Web サイトに埋め込むことができるカスタム JavaScript ウィジェットを作成することは、Ruby on Rails アプリケーションの範囲を拡張する強力な方法です。チャット ボックス、分析トラッカー、その他のインタラクティブな要素のいずれであっても、カスタム ウィジェットを使用すると機能をユーザーに直接提供できます。安全で埋め込み可能なウィジェットを構築する手順を段階的に説明し、ベスト プラクティスについて説明しましょう。
1. ステップ 1: セットアップ
2. ステップ 2: クライアント用の埋め込みコードを作成する
3. ステップ 3: Iframe にウィジェットを埋め込む (オプション)
4. ステップ 4: Iframe 埋め込み用のヘッダーを設定
5. ステップ 5: ウィジェットをテストする
6. ステップ 6: バージョン管理されたルートとコントローラーによるバージョンサポートの追加
新しい Rails エンドポイントを作成する: このエンドポイントは、ウィジェットの JavaScript コードを提供します。通常、これは WidgetsController:
内のアクションになります。
# app/controllers/widgets_controller.rb class WidgetsController < ApplicationController def show # Your widget code here end end
ルートの構成: ウィジェットにアクセスできるようにルートを設定します。
# config/routes.rb Rails.application.routes.draw do get '/widget.js', to: 'widgets#show', as: :widget end
コントローラーから JavaScript を提供する: Rails では、適切なコンテンツ タイプを設定することで JavaScript で応答できます。
# app/controllers/widgets_controller.rb class WidgetsController < ApplicationController def show response.headers['Content-Type'] = 'application/javascript' render layout: false end end
ウィジェットの JavaScript コードを作成する: 通常、ウィジェット スクリプトには、クライアントのページにカスタム HTML 要素または iframe をレンダリングするロジックが含まれています。
// app/views/widgets/show.js.erb (function() { const widgetDiv = document.createElement('div'); widgetDiv.id = 'custom-widget'; widgetDiv.innerHTML = "<p>This is your custom widget content!</p>"; document.body.appendChild(widgetDiv); })();
クライアントがウィジェットを埋め込めるようにするには、コピーして HTML に貼り付けることができる JavaScript スニペットを提供します。
<!-- Client Embeddable Code --> <script type="text/javascript"> (function() { const script = document.createElement('script'); script.src = "https://yourapp.com/widget.js"; script.async = true; document.head.appendChild(script); })(); </script>
スタイルの分離と制御を強化するには、ウィジェット コンテンツを iframe に埋め込むことを検討してください。このアプローチにより、ウィジェットのスタイルと動作がクライアントのサイトから分離されます。
// app/views/widgets/show.js.erb (function() { const iframe = document.createElement('iframe'); iframe.src = "<%= widget_content_url %>"; iframe.style.width = "300px"; iframe.style.height = "200px"; document.body.appendChild(iframe); })();
# config/routes.rb Rails.application.routes.draw do get '/widget_content', to: 'widgets#content', as: :widget_content end
# app/controllers/widgets_controller.rb def content render layout: false end
<!-- app/views/widgets/content.html.erb --> <div> <h2> Step 4: Setting Headers for Iframe Embedding </h2> <p>Configure the appropriate HTTP headers to ensure your widget works securely in an iframe. There are two primary headers to consider:</p> <p><strong>Remove the X-Frame-Options Header</strong>: The X-Frame-Options header is deprecated but still widely respected by many browsers. To remove it, add the following configuration in an initializer:<br> </p> <pre class="brush:php;toolbar:false"># config/initializers/security_headers.rb Rails.application.config.action_dispatch.default_headers.delete('X-Frame-Options')
Frame-Ancestors ディレクティブを設定します:最新でより柔軟なアプローチは、Content-Security-Policy を Frame-ancestors ディレクティブとともに使用することです。これにより、ウィジェットの埋め込みを許可するドメインを指定できます。 iframe。セキュリティ要件に基づいて、必要に応じてこのヘッダーを調整します。
# config/initializers/security_headers.rb Rails.application.config.action_dispatch.default_headers.merge!({ 'Content-Security-Policy' => "frame-ancestors 'self' https://trusted-domain.com" })
この構成では、指定されたドメインによってのみアプリを iframe に埋め込むことができます。 https://trusted-domain.com を、信頼できる実際のドメインに置き換えます。
ウィジェットとヘッダーを設定したら、さまざまなブラウザーのテスト ページにウィジェットを埋め込んでテストし、互換性を確認します。フレーム祖先を使用した場合は、指定したドメインのみがウィジェットを埋め込むことができ、ウィジェットが期待どおりに表示されることを確認してください。
ウィジェットが進化するにつれて、すべてのクライアントがすぐに導入できるわけではない新機能や改善点が導入される場合があります。ウィジェットの複数のバージョンをサポートすることで下位互換性が確保され、クライアントは既存の統合を中断することなく自分のペースでアップグレードできるようになります。
まず、ウィジェットのバージョンごとに個別のルートを設定します。各バージョンの名前空間を設定すると、コードが整理され、異なるバージョンを個別に管理できるようになります。
# app/controllers/widgets_controller.rb class WidgetsController < ApplicationController def show # Your widget code here end end
バージョンごとに、その名前空間内にコントローラーを作成します。この分離により、あるバージョンでの変更が他のバージョンに影響を与えないようになります。
# config/routes.rb Rails.application.routes.draw do get '/widget.js', to: 'widgets#show', as: :widget end
# app/controllers/widgets_controller.rb class WidgetsController < ApplicationController def show response.headers['Content-Type'] = 'application/javascript' render layout: false end end
各バージョンには独自の JavaScript ファイルと HTML ファイルを含めることができるため、バージョンごとに機能と外観を調整できます。
バージョン 1 JavaScript:
// app/views/widgets/show.js.erb (function() { const widgetDiv = document.createElement('div'); widgetDiv.id = 'custom-widget'; widgetDiv.innerHTML = "<p>This is your custom widget content!</p>"; document.body.appendChild(widgetDiv); })();
バージョン 1 コンテンツ:
<!-- Client Embeddable Code --> <script type="text/javascript"> (function() { const script = document.createElement('script'); script.src = "https://yourapp.com/widget.js"; script.async = true; document.head.appendChild(script); })(); </script>
バージョン 2 コンテンツ:
// app/views/widgets/show.js.erb (function() { const iframe = document.createElement('iframe'); iframe.src = "<%= widget_content_url %>"; iframe.style.width = "300px"; iframe.style.height = "200px"; document.body.appendChild(iframe); })();
Rails アプリケーションの埋め込み可能なウィジェットを作成するには、JavaScript を安全に提供すること、スタイルを管理すること、iframe との互換性のためにヘッダーを正しく構成することなど、いくつかの重要な考慮事項が必要です。上記の手順に従うことで、クライアントがサイトに簡単に追加できるウィジェットが作成され、Rails アプリケーションの使いやすさが拡張されます。
以上がRails を使用して JS ウィジェットをスムーズに埋め込む: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。