SWFタグライター

| トラックバック(0)



頼まれたのでswfTagWriter.jsの書き出しに必要な部分だけをパクりつつ、リファクターしてみたよ。使うのはこんな感じ:



var f = Flash.TagWriter({
filename: '/path/to/flash.swf',
attributes: { some_html_attribute: 'hoge' },
flashvars: { var1: 'value' },
parameters: { param1: 'param1' },
width: 720,
height: 50,
id: 'my_id',
loop: false,
quality: 'high'
});
document.write(f);

使えそうだったらどうぞー。


  if (typeof Class == 'undefined') {
    Class = {
      create: function() {
        return function() { this.initialize.apply(this, arguments) };
      }
    };
  }
  var Flash = {};

(function() {
Flash.Detector = Class.create();
Flash.TagWriter = Class.create();

Flash.Util = {};
Flash.Util.htmlEscape = function(string) {
string = '' + string; /* force stringification */
return string.replace(/&/g, '&#38;').replace(/</g, '&#60;').replace(/>/g, '&#62;');
}

Flash.Detector.prototype = {
initialize: function() {
},
isAvailable: function() {
if (navigator.plugins && navigator.mimeTypes.length > 0 && navigator.plugins["Shockwave Flash"]) {
return true;
}

var ret = false;
if (window.ActiveXObject) { /* Oh, the gory */
/*@cc_on
@if(@_jscript_version >= 5.0)
try {
var player = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
ret = true;
} catch(e) {}
@end @*/
}
return ret;
}
};

Flash.TagWriter.prototype = {
initialize: function(opts) {
if (opts == null) opts = {};
var member = {
attributes: {},
flashvars: {},
parameters: {},
filename: '',
width: '',
height: '',
id: '',
loop: false,
quality: 'high'
};
for(var key in member) {
this[key] = opts[key] || member[key];
}

var detector = new Flash.Detector();
this.html =
detector.isAvailable() ?
( this.isMSIE() ? this.htmlForMSIE : this.htmlForSaneBrowsers ) :
this.htmlForNonFlash
;
},
isMSIE: function() {
var agent = navigator.userAgent.toLowerCase();
return (
agent.indexOf('msie') >= 0 &&
agent.indexOf('win') >= 0 &&
agent.indexOf('opera') == -1
) ;
},
htmlForMSIE: function() {
var html = '';
html +=
'<object ' +
'classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ' +
'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#' + '" '
'width="' + this.width + '" ' +
'height="' + this.height + '" ' +
'id="' + this.id + '" '
;
html += ">\n";
html += this.htmlForParams();
html += this.htmlForFlashVars();
html += "</object>\n";
return html;
},
htmlForSaneBrowsers: function() {
var html = '';

html +=
'<object ' +
'type="application/x-shockwave-flash" ' +
'data="' + this.filename + '" ' +
'width="' + this.width + '" ' +
'height="' + this.height + '" ' +
'id="' + this.id + '" '
;
html += ">\n";
html += this.htmlForParams();
html += this.htmlForFlashVars();
html += "</object>\n";
return html;
},
htmlForNonFlash: function() {
return '<p>You have to <a href="http://www.macromedia.com/jp/shockwave/download/?P1_Prod_Version=ShockwaveFlash&#38;Lang=Japanese">install or update Flash Player</a> in order to display the content.</p>';
},
htmlForParams: function() {
var html = '';
var params = {};
for(var key in this.parameters) {
params[key] = this.parameters[key];
}
params.movie = this.filename;
params.loop = this.loop;
params.quality = this.quality;

for(var key in params) {
html += '<param name="' + key + '" value="' + Flash.Util.htmlEscape(params[key]) + "\" />\n";
}
return html;
},
htmlForFlashVars: function() {
var varlist = [];
for(var key in this.flashvars) {
varlist.push(
key + '=' + Flash.Util.htmlEscape(this.flashvars[key])
);
}

return (varlist.length > 0) ?
'<param name="flashvars" value="' + varlist.join('&') + "\" />\n" :
''
;
},
htmlForAttributes: function() {
var html = '';
for (var key in this.attributes) {
var value = "" + this.attributes[key];
html += key + '="' + Flash.Util.htmlEscape(value) + '" ';
}
return html;
}
};
})();

Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ