61

Rails アプリを iframe 経由で別の Web サイトに埋め込むにはどうすればよいですか?

RoR 3 では問題なく動作しますが、RoR 4 ではうまく動作しません。

<iframe src="http://myrailsapp.com/" width="100%" height="50" id="rails_iframe">error!</iframe>

verify_authenticity_tokenコントローラーでオプションを使用しようとしprotect_from_forgeryました...それは別のもののようです(しかし、よくわかりません)。

更新。例: http://jsfiddle.net/zP329/

4

4 に答える 4

53

Rails 4 のデフォルトのX-Frame-OptionsHTTP ヘッダー値が追加されましSAMEORIGINた。これはセキュリティに適してactionますが、 で を呼び出したい場合はiframe、次のようにすることができます。


すべてのオリジンを許可するには:

class MyController < ApplicationController
  def iframe_action
    response.headers.delete "X-Frame-Options"
    render_something
  end
end


特定のオリジンを許可するには:

class MyController < ApplicationController
  def iframe_action
    response.headers["X-FRAME-OPTIONS"] = "ALLOW-FROM http://some-origin.com"
    render_something
  end
end


:after_filter を使用

で を複数使用する必要がある場合は、メソッドを作成しactioniframeで呼び出すことをお勧めします:after_filter

class ApplicationController < ActionController::Base

  private
  def allow_iframe
    response.headers.delete "X-Frame-Options"
  end
end

次のようにコントローラーで使用します。

class MyController < ApplicationController
  after_filter :allow_iframe, only: [:basic_embed, :awesome_embed]

  def basic_embed
      render_something
  end

  def awesome_embed
      render_something
  end

  # Other Actions...
end

経由: Rails 4: 特定のアクションを iframe として埋め込む

于 2015-03-11T05:54:59.597 に答える
0

Rails 6 と Chromium 76 を使用しています。X-Frame-Options を使用した以前のソリューションは機能しません。しかし、オンライン iframe を JS で接続すると、非常にうまく機能することに気付きました。だから、私は自分の見解でこの簡単な解決策を作りました:

<div id='iframe_wrapper' 'data-iframe-content'='<iframe src="https://host.com/"></iframe>'>
</div>

...そして、次のような JS コードを追加します。

$(document).ready(function() {
  var wrapper = $('#iframe_wrapper')[0]
  wrapper.innerHTML = wrapper.attributes['data-iframe-content'].value
})
于 2019-10-01T12:20:04.650 に答える