Rails plugin: treat your Adobe Flash swf files like any other asset (images, javascripts, etc...) and embed them using SWFObject 2.2
Ruby ActionScript JavaScript CoffeeScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


swf_fu Gem Version Click here to lend your support to: swf_fu and make a donation at www.pledgie.com !

With the swf_fu plugin, rails treats your swf files like any other asset (images, javascripts, etc…).

swf_fu (pronounced “swif-fu”, bonus joke for french speakers) uses SWFObject 2.2 to embed swf objects in HTML and supports all its options. SWFObject 2 is such a nice library that Adobe now uses it as the official way to embed swf! SWFObject's project can be found at code.google.com/p/swfobject

Comments and pull requests welcome: github.com/marcandre/swf_fu


Version 2 of swf_fu is an engine for Rails 3.1+ and Ruby 1.8.7+.

Version 1.x was a plugin for previous versions of Rails and should not be used with Rails 3.1+. If you want to use it, checkout the v1.x branch. If you are upgrading to Rails 3.1+, remove the plugin!


Add to your Gemfile:

gem "swf_fu", "~> 2.0"

Then run `bundle install`.

You also need to require some javascripts, so in your `app/assets/javascripts/application.js` you want to append:

\\= require swf_fu


Embedding in HTML

To embed a swf file, use swf_tag:

<%= swf_tag "i_like_flashing" %>

Exactly like images and javascripts, swf_tag will use swf_path to determine the path of the swf file; it will assume it is in /assets/swfs/ or in /public/swfs/ unless specified otherwise and it will add the “.swf” extension automatically.

You can specify alternate content either with the options :alt => "Get Flash!" or you can use swf_tag as a block:

<% swf_tag "i_like_flashing" do %>
  Get Flash
<% end %>


  • :id - the DOM id of the flash object element that is used to contain the Flash object; defaults to the name of the swf in source

  • :width, :height - the width & height of the Flash object. Defaults to “100%”. These could also specified using :size

  • :size - the size of the Flash object, in the form “400x300”.

  • :mode - Either :dynamic (default) or :static. Refer to SWFObject's doc

  • :flashvars - a Hash of variables that are passed to the swf. Can also be a string like "foo=bar&hello=world". Defaults to {:id => the DOM id}

  • :parameters - a Hash of configuration parameters for the swf. See Adobe's doc

  • :html_options - a Hash of extra html options for the object tag.

  • :alt - HTML text that is displayed when the Flash player is not available. Defaults to a “Get Flash” image pointing to Adobe Flash's installation page. This can also be specified as a block (see embedding section). In Rails 3, this text is assumed to be HTML, so there is no need to call html_safe on it.

  • :flash_version - the version of the Flash player that is required (e.g. “7” (default) or “8.1.0”)

  • :auto_install - a swf file that will upgrade flash player if needed (defaults to “expressInstall” which was installed by swf_fu)

  • :javascript_class - specify a javascript class (e.g. “MyFlash”) for your flash object. If it exists, the initialize method will be called. See the 'dummy' example in the test folder

  • :initialize - arguments to pass to the initialization method of your javascript class.

  • :div_id - the DOM id of the containing div itself. Defaults to "#{option[:id]}_div"

  • :switch_off_auto_hide_show - switch off SWFObject's default hide/show behavior. SWFObject temporarily hides your SWF or alternative content until the library has decided which content to display. Defaults to nil.

You can override these default options with a global setting:

ActionView::Base.swf_default_options = {:mode => :static}   # All swf_tag will use the static mode by default

In your config files, you can write this as:

config.action_view.swf_default_options = {:mode => :static}   # All swf_tag will use the static mode by default

Any of these options can be a Proc, in which case it will be called each time swf_tag is called.

For example, the following will generate unique IDs:

my_swf_counter = 0
config.action_view.swf_default_options[:id] = Proc.new{"swf_unique_id_#{my_swf_counter+=1}"}


swf_tag implements and relies on swf_path which behaves in a similar fashion to image_path, javascript_path, etc…:

swf_path("example")                            => "/swfs/example.swf" or "/assets/example.swf"
swf_path("example.swf")                        => "/swfs/example.swf" or "/assets/example.swf"
swf_path("fonts/optima")                       => "/swfs/fonts/optima.swf" or "/assets/fonts/optima.swf"
swf_path("/fonts/optima")                      => "/fonts/optima.swf"
swf_path("http://www.example.com/game.swf")    => "http://www.example.com/game.swf"

It takes into account the global setting asset_host, like any other asset:

ActionController::Base.asset_host = "http://assets.example.com"
image_path("logo.jpg")                         => "http://assets.example.com/images/logo.jpg"
swf_path("fonts/optima")                       => "http://assets.example.com/swfs/fonts/optima.swf"

Copyright © 2010-2013 Marc-André Lafortune, released under the BSD license