📄 flash.js
字号:
}
};
/**
A class that helps us determine whether Flash is available,
it's major and minor versions, and what Flash version features should
be used for Flash/JavaScript communication. Parts of this code
are adapted from the automatic Flash plugin detection code autogenerated
by the Macromedia Flash 8 authoring environment.
An instance of this class can be accessed on dojo.flash.info after
the page is finished loading.
This constructor must be called before the page is finished loading.
*/
dojo.flash.Info = function(){
// Visual basic helper required to detect Flash Player ActiveX control
// version information on Internet Explorer
if(dojo.render.html.ie){
document.writeln('<script language="VBScript" type="text/vbscript"\>');
document.writeln('Function VBGetSwfVer(i)');
document.writeln(' on error resume next');
document.writeln(' Dim swControl, swVersion');
document.writeln(' swVersion = 0');
document.writeln(' set swControl = CreateObject("ShockwaveFlash.ShockwaveFlash." + CStr(i))');
document.writeln(' if (IsObject(swControl)) then');
document.writeln(' swVersion = swControl.GetVariable("$version")');
document.writeln(' end if');
document.writeln(' VBGetSwfVer = swVersion');
document.writeln('End Function');
document.writeln('</script\>');
}
this._detectVersion();
this._detectCommunicationVersion();
}
dojo.flash.Info.prototype = {
/** The full version string, such as "8r22". */
version: -1,
/**
The major, minor, and revisions of the plugin. For example, if the
plugin is 8r22, then the major version is 8, the minor version is 0,
and the revision is 22.
*/
versionMajor: -1,
versionMinor: -1,
versionRevision: -1,
/** Whether this platform has Flash already installed. */
capable: false,
/**
The major version number for how our Flash and JavaScript communicate.
This can currently be the following values:
6 - We use a combination of the Flash plugin methods, such as SetVariable
and TCallLabel, along with fscommands, to do communication.
8 - We use the ExternalInterface API.
-1 - For some reason neither method is supported, and no communication
is possible.
*/
commVersion: 6,
/** Set if we are in the middle of a Flash installation session. */
installing: false,
/**
Asserts that this environment has the given major, minor, and revision
numbers for the Flash player. Returns true if the player is equal
or above the given version, false otherwise.
Example: To test for Flash Player 7r14:
dojo.flash.info.isVersionOrAbove(7, 0, 14)
*/
isVersionOrAbove: function(reqMajorVer, reqMinorVer, reqVer){
// make the revision a decimal (i.e. transform revision 14 into
// 0.14
reqVer = parseFloat("." + reqVer);
if(this.versionMajor >= reqMajorVer && this.versionMinor >= reqMinorVer
&& this.versionRevision >= reqVer){
return true;
}else{
return false;
}
},
_detectVersion: function(){
var versionStr;
// loop backwards through the versions until we find the newest version
for(var testVersion = 25; testVersion > 0; testVersion--){
if(dojo.render.html.ie){
versionStr = VBGetSwfVer(testVersion);
}else{
versionStr = this._JSFlashInfo(testVersion);
}
if(versionStr == -1 ){
this.capable = false;
return;
}else if(versionStr != 0){
var versionArray;
if(dojo.render.html.ie){
var tempArray = versionStr.split(" ");
var tempString = tempArray[1];
versionArray = tempString.split(",");
}else{
versionArray = versionStr.split(".");
}
this.versionMajor = versionArray[0];
this.versionMinor = versionArray[1];
this.versionRevision = versionArray[2];
// 7.0r24 == 7.24
var versionString = this.versionMajor + "." + this.versionRevision;
this.version = parseFloat(versionString);
this.capable = true;
break;
}
}
},
/**
JavaScript helper required to detect Flash Player PlugIn version
information. Internet Explorer uses a corresponding Visual Basic
version to interact with the Flash ActiveX control.
*/
_JSFlashInfo: function(testVersion){
// NS/Opera version >= 3 check for Flash plugin in plugin array
if(navigator.plugins != null && navigator.plugins.length > 0){
if(navigator.plugins["Shockwave Flash 2.0"] ||
navigator.plugins["Shockwave Flash"]){
var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
var descArray = flashDescription.split(" ");
var tempArrayMajor = descArray[2].split(".");
var versionMajor = tempArrayMajor[0];
var versionMinor = tempArrayMajor[1];
if(descArray[3] != ""){
var tempArrayMinor = descArray[3].split("r");
}else{
var tempArrayMinor = descArray[4].split("r");
}
var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
var version = versionMajor + "." + versionMinor + "."
+ versionRevision;
return version;
}
}
return -1;
},
/**
Detects the mechanisms that should be used for Flash/JavaScript
communication, setting 'commVersion' to either 6 or 8. If the value is
6, we use Flash Plugin 6+ features, such as GetVariable, TCallLabel,
and fscommand, to do Flash/JavaScript communication; if the value is
8, we use the ExternalInterface API for communication.
*/
_detectCommunicationVersion: function(){
if(this.capable == false){
this.commVersion = null;
return;
}
// detect if the user has over-ridden the default flash version
if (typeof djConfig["forceFlashComm"] != "undefined" &&
typeof djConfig["forceFlashComm"] != null){
this.commVersion = djConfig["forceFlashComm"];
return;
}
// we prefer Flash 6 features over Flash 8, because they are much faster
// and much less buggy
// at this point, we don't have a flash file to detect features on,
// so we need to instead look at the browser environment we are in
if(dojo.render.html.safari == true || dojo.render.html.opera == true){
this.commVersion = 8;
}else{
this.commVersion = 6;
}
}
};
/** A class that is used to write out the Flash object into the page. */
dojo.flash.Embed = function(visible){
this._visible = visible;
}
dojo.flash.Embed.prototype = {
/**
The width of this Flash applet. The default is the minimal width
necessary to show the Flash settings dialog.
*/
width: 215,
/**
The height of this Flash applet. The default is the minimal height
necessary to show the Flash settings dialog.
*/
height: 138,
/** The id of the Flash object. */
id: "flashObject",
/** Controls whether this is a visible Flash applet or not. */
_visible: true,
/**
Writes the Flash into the page. This must be called before the page
is finished loading.
@param flashVer The Flash version to write.
@param doExpressInstall Whether to write out Express Install
information. Optional value; defaults to false.
*/
write: function(flashVer, doExpressInstall){
//dojo.debug("write");
if(dojo.lang.isUndefined(doExpressInstall)){
doExpressInstall = false;
}
// determine our container div's styling
var containerStyle = new dojo.string.Builder();
containerStyle.append("width: " + this.width + "px; ");
containerStyle.append("height: " + this.height + "px; ");
if(this._visible == false){
containerStyle.append("position: absolute; ");
containerStyle.append("z-index: 10000; ");
containerStyle.append("top: -1000px; ");
containerStyle.append("left: -1000px; ");
}
containerStyle = containerStyle.toString();
// figure out the SWF file to get and how to write out the correct HTML
// for this Flash version
var objectHTML;
var swfloc;
// Flash 6
if(flashVer == 6){
swfloc = dojo.flash.flash6_version;
var dojoPath = djConfig.baseRelativePath;
swfloc = swfloc + "?baseRelativePath=" + escape(dojoPath);
objectHTML =
'<embed id="' + this.id + '" src="' + swfloc + '" '
+ ' quality="high" bgcolor="#ffffff" '
+ ' width="' + this.width + '" height="' + this.height + '" '
+ ' name="' + this.id + '" '
+ ' align="middle" allowScriptAccess="sameDomain" '
+ ' type="application/x-shockwave-flash" swLiveConnect="true" '
+ ' pluginspage="http://www.macromedia.com/go/getflashplayer">';
}else{ // Flash 8
swfloc = dojo.flash.flash8_version;
var swflocObject = swfloc;
var swflocEmbed = swfloc;
var dojoPath = djConfig.baseRelativePath;
if(doExpressInstall){
// the location to redirect to after installing
var redirectURL = escape(window.location);
document.title = document.title.slice(0, 47) + " - Flash Player Installation";
var docTitle = escape(document.title);
swflocObject += "?MMredirectURL=" + redirectURL
+ "&MMplayerType=ActiveX"
+ "&MMdoctitle=" + docTitle
+ "&baseRelativePath=" + escape(dojoPath);
swflocEmbed += "?MMredirectURL=" + redirectURL
+ "&MMplayerType=PlugIn"
+ "&baseRelativePath=" + escape(dojoPath);
}
objectHTML =
'<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '
+ 'codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" '
+ 'width="' + this.width + '" '
+ 'height="' + this.height + '" '
+ 'id="' + this.id + '" '
+ 'align="middle"> '
+ '<param name="allowScriptAccess" value="sameDomain" /> '
+ '<param name="movie" value="' + swflocObject + '" /> '
+ '<param name="quality" value="high" /> '
+ '<param name="bgcolor" value="#ffffff" /> '
+ '<embed src="' + swflocEmbed + '" '
+ 'quality="high" '
+ 'bgcolor="#ffffff" '
+ 'width="' + this.width + '" '
+ 'height="' + this.height + '" '
+ 'id="' + this.id + '" '
+ 'name="' + this.id + '" '
+ 'swLiveConnect="true" '
+ 'align="middle" '
+ 'allowScriptAccess="sameDomain" '
+ 'type="application/x-shockwave-flash" '+ "&baseRelativePath=" + escape(dojoPath);
+ 'pluginspage="http://www.macromedia.com/go/getflashplayer" />'
+ '</object>';
}
// now write everything out
objectHTML = '<div id="' + this.id + 'Container" style="' + containerStyle + '"> '
+ objectHTML
+ '</div>';
document.writeln(objectHTML);
},
/** Gets the Flash object DOM node. */
get: function(){
//return (dojo.render.html.ie) ? window[this.id] : document[this.id];
// more robust way to get Flash object; version above can break
// communication on IE sometimes
return document.getElementById(this.id);
},
/** Sets the visibility of this Flash object. */
setVisible: function(visible){
var container = dojo.byId(this.id + "Container");
if(visible == true){
container.style.visibility = "visible";
}else{
container.style.position = "absolute";
container.style.x = "-1000px";
container.style.y = "-1000px";
container.style.visibility = "hidden";
}
},
/** Centers the flash applet on the page. */
center: function(){
// FIXME: replace this with Dojo's centering code rather than our own
// We want to center the Flash applet vertically and horizontally
var elementWidth = this.width;
var elementHeight = this.height;
// get the browser width and height; the code below
// works in IE and Firefox in compatibility, non-strict
// mode
var browserWidth = document.body.clientWidth;
var browserHeight = document.body.clientHeight;
// in Firefox if we are in standards compliant mode
// (with a strict doctype), then the browser width
// and height have to be computed from the root level
// HTML element not the BODY element
if(!dojo.render.html.ie && document.compatMode == "CSS1Compat"){
browserWidth = document.body.parentNode.clientWidth;
browserHeight = document.body.parentNode.clientHeight;
}else if(dojo.render.html.ie && document.compatMode == "CSS1Compat"){
// IE 6 in standards compliant mode has to be calculated
// differently
browserWidth = document.documentElement.clientWidth;
browserHeight = document.documentElement.clientHeight;
}else if(dojo.render.html.safari){ // Safari works different
browserHeight = self.innerHeight;
}
// get where we are scrolled to in the document
// the code below works in FireFox
var scrolledByWidth = window.scrollX;
var scrolledByHeight = window.scrollY;
// compute these values differently for IE;
// IE has two possibilities; it is either in standards
// compatibility mode or it is not
if(typeof scrolledByWidth == "undefined"){
if(document.compatMode == "CSS1Compat"){ // standards mode
scrolledByWidth = document.documentElement.scrollLeft;
scrolledByHeight = document.documentElement.scrollTop;
}else{ // Pre IE6 non-standards mode
scrolledByWidth = document.body.scrollLeft;
scrolledByHeight = document.body.scrollTop;
}
}
// compute the centered position
var x = scrolledByWidth + (browserWidth - elementWidth) / 2;
var y = scrolledByHeight + (browserHeight - elementHeight) / 2;
// set the centered position
var container = dojo.byId(this.id + "Container");
container.style.top = y + "px";
container.style.left = x + "px";
}
};
/**
A class that is used to communicate between Flash and JavaScript in
a way that can pass large amounts of data back and forth reliably,
very fast, and with synchronous method calls. This class encapsulates the
specific way in which this communication occurs,
presenting a common interface to JavaScript irrespective of the underlying
Flash version.
*/
dojo.flash.Communicator = function(){
if(dojo.flash.useFlash6()){
this._writeFlash6();
}else if (dojo.flash.useFlash8()){
this._writeFlash8();
}
}
dojo.flash.Communicator.prototype = {
_writeFlash6: function(){
var id = dojo.flash.obj.id;
// global function needed for Flash 6 callback;
// we write it out as a script tag because the VBScript hook for IE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -