Introduction
SWFObject is a JavaScript library for dynamically embedding Flash content in your HTML pages. It's cross-browser capable and it gets rid of the annoying 'Click to enable control' message in Internet Explorer, plus other useful features. For more details, visit this blog.
Using the code
This is how you would use SWFObject in an ASP.NET page:
<div id="container">
<script type="text/javascript">
var flash = new SWFObject(<%= ("\"" +
ResolveUrl("~/swf/movie.swf") +
"\"") %>, "", "600", "200", "6", "");
with (flash) {
addParam("menu", "false");
addVariable("approot", <%= ( "\"" +
Request.ApplicationPath + "\"") %>);
write("container");
}
</script>
</div>
Using the server control I built, the code would look like this:
<div id="container" runat="server">
<flash:SWFObject id="flash1" runat="server"
Movie="~/swf/movie.swf" Width="600"
Height="200" FlashVersion="6">
<flash:SWFParameter runat="server" Name="menu" Value="false" />
<flash:SWFVariable runat="server" Name="approot"
Value='<%#Request.ApplicationPath %>' />
</flash:SWFObject>
</div>
Note that you can use databinding and add as many parameters and variables as you want. Here is the source code:
[ParseChildren(typeof(SWFInput))]
[PersistChildren(true)]
public class SWFObject : Control {
string _containerID = null,
_movie = "", _width = "", _height = "", _flashVersion = "";
WModeEnum wmode = WModeEnum.NotSet;
bool _menu = false;
public string ContainerID { get { return _containerID; } set {
_containerID = value; } }
public string Movie { get { return _movie; } set { _movie = value; } }
public string Width { get { return _width; } set { _width = value; } }
public string Height { get { return _height; } set { _height = value; } }
public string FlashVersion { get { return _flashVersion; } set {
_flashVersion = value; } }
public bool Menu { get { return _menu; } set { _menu = value; } }
public WModeEnum WMode { get { return wmode; } set { wmode = value; } }
protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
Page.ClientScript.RegisterClientScriptInclude(
this.GetType(),
"swfobject.js",
Page.ClientScript.GetWebResourceUrl(this.GetType(), "swfobject.js")
);
}
public override void RenderControl(HtmlTextWriter writer) {
string movie = ResolveClientUrl(_movie);
string id = (_containerID == null) ? Parent.ClientID : _containerID;
string jsVar = id + "_SWFObject";
writer.WriteLine(string.Format("<!-- \"{0}\" with SWFObject START -->",
movie));
writer.WriteBeginTag("script");
writer.WriteAttribute("type", "text/javascript");
writer.WriteLine(HtmlTextWriter.TagRightChar);
writer.WriteLine(string.Format("var {0} = new SWFObject
('{1}', '', '{2}', '{3}', '{4}', '');", new object[]
{ jsVar, movie, _width, _height, _flashVersion }));
writer.WriteLine(string.Format("with ({0}) {{", jsVar));
foreach (Control control in Controls) {
if (control is SWFInput)
RenderInput((SWFInput)control, writer);
}
RenderInput(new SWFParameter("menu", _menu.ToString()), writer);
if (wmode != WModeEnum.NotSet)
RenderInput(new SWFParameter("wmode", wmode.ToString()), writer);
writer.WriteLine(string.Format("write('{0}');", id));
writer.WriteLine("}");
writer.WriteEndTag("script");
writer.WriteLine();
writer.Write(string.Format("<!-- \"{0}\" with SWFObject END -->",
movie));
}
protected virtual void RenderInput(SWFInput input, HtmlTextWriter writer) {
writer.WriteLine(
string.Format("add{0}('{1}', '{2}');",
((input is SWFParameter) ? "Param" : "Variable"),
input.Name, input.Value)
);
}
#region Nested Types
public enum WModeEnum { NotSet, Window, Opaque, Transparent }
#endregion
}
public class SWFParameter : SWFInput {
public SWFParameter() { }
public SWFParameter(string name, string value) {
Name = name;
Value = value;
}
}
public class SWFVariable : SWFInput { }
[ParseChildren(true)]
public abstract class SWFInput : Control {
string _name = "";
string _value = "";
public string Name { get { return _name; } set { _name = value; } }
public string Value { get { return _value; } set { _value = value; } }
}
History
- 12 Dec, 2006 - Original version posted
- 21 Dec, 2006 - Updated
- 15 May, 2007 - Updated