View comments | RSS feed

MovieClip._lockroot

Availability

Flash Player 7.

Usage

my_mc._lockroot:Boolean

Description

Property; specifies what _root refers to when a SWF file is loaded into a movie clip. The _lockroot property is undefined by default. You can set this property within the SWF file that is being loaded or in the handler that is loading the movie clip.

For example, suppose you have a document called Games.fla that lets a user choose a game to play, and loads the game (for example, Chess.swf) into the game_mc movie clip. You want to make sure that, if _root is used in Chess.swf, it still refers to _root in Chess.swf after being loaded into Games.swf. If you have access to Chess.fla and publish it to Flash Player 7 or later, you can add this statement to Chess.fla on the main Timeline:

this._lockroot = true;

If you don't have access to Chess.fla (for example, if you are loading Chess.swf from someone else's site into chess_mc), you can set its _lockroot property when you load it, as shown below. In this case, Chess.swf can be published for any version of Flash Player, as long as Games.swf is published for Flash Player 7 or later. Place the following ActionScript on the main Timeline:

chess_mc._lockroot = true;

When calling loadMovie(), set the MovieClip._lockroot property to true in the loader movie, as shown in the following code. If you don't set _lockroot to true in the loader movie, the loader has access only to its own library, but not the library in the loaded movie:

myMovieClip._lockroot = true;

Example

In the following example, lockroot.fla has _lockroot applied to the main SWF file. If it is loaded into another FLA document, _root will always refer to the scope of lockroot.swf, which helps prevent conflicts. Place the following ActionScript on the main Timeline of lockroot.fla.

this._lockroot = true;
_root.myVar = 1;
_root.myOtherVar = 2;
trace("from lockroot.swf");
for (i in _root) {
   trace("  "+i+" -> "+_root[i]);
}
trace("");

Which traces the following information:

from lockroot.swf
myOtherVar -> 2
myVar -> 1
_lockroot -> true
$version -> WIN 7,0,19,0

The following example loads two SWF files, lockroot.swf and nolockroot.swf. The lockroot.fla document contains the previous ActionScript. The nolockroot FLA file has the following code placed on Frame 1 of the Timeline:

_root.myVar = 1;
_root.myOtherVar = 2;
trace("from nolockroot.swf");
for (i in _root) {
   trace("  "+i+" -> "+_root[i]);
}
trace("");

The lockroot.swf file has _lockroot applied to it, and nolockroot.swf does not. After the files are loaded, each file dumps variables from their _root scopes. Place the following ActionScript on the main Timeline of a FLA document:

this.createEmptyMovieClip("lockroot_mc", this.getNextHighestDepth());
lockroot_mc.loadMovie("lockroot.swf");
this.createEmptyMovieClip("nolockroot_mc", this.getNextHighestDepth());
nolockroot_mc.loadMovie("nolockroot.swf");
function dumpRoot() {
   trace("from current SWF file");
   for (i in _root) {
      trace("  "+i+" -> "+_root[i]);
   }
   trace("");
}
dumpRoot();

which traces the following information:

from current SWF file
dumpRoot -> [type Function]
$version -> WIN 7,0,19,0
nolockroot_mc -> _level0.nolockroot_mc
lockroot_mc -> _level0.lockroot_mc

from nolockroot.swf
myVar -> 1
i -> lockroot_mc
dumpRoot -> [type Function]
$version -> WIN 7,0,19,0
nolockroot_mc -> _level0.nolockroot_mc
lockroot_mc -> _level0.lockroot_mc

from lockroot.swf
myOtherVar -> 2
myVar -> 1

The file with no _lockroot applied contains all of the other variables contained in the root SWF as well. If you don't have access to the nolockroot.fla, then you can change the _lockroot in the main FLA document above using the following ActionScript added to the main Timeline:

this.createEmptyMovieClip("nolockroot_mc", this.getNextHighestDepth());
nolockroot_mc._lockroot = true;
nolockroot_mc.loadMovie("nolockroot.swf");

which would then trace the following:

from current SWF file
dumpRoot -> [type Function]
$version -> WIN 7,0,19,0
nolockroot_mc -> _level0.nolockroot_mc
lockroot_mc -> _level0.lockroot_mc

from nolockroot.swf
myOtherVar -> 2
myVar -> 1

from lockroot.swf
myOtherVar -> 2
myVar -> 1

See also

MovieClip.attachMovie(), MovieClip.loadMovie(), MovieClipLoader.onLoadInit, _root, and "About loading components" in Using Components.


Comments


recoveredfromflashMX2004 said on Aug 4, 2004 at 3:27 PM :
myevilterran said on Jun 21, 2004 at 3:39 PM :

Note that _lockroot only affects _root and /. You can still use _parent or _level0 successfully from the loaded movie.
s1oth said on Oct 1, 2004 at 11:06 AM :
Macromedia Needs to do some better Error Checking on this...

if you screw up the syntax like this:
this._lockroot;
or
_root._lockroot = true;

Those don't get caught by code checks and just end up causing big problems.
StefanoMega said on Nov 13, 2004 at 8:26 AM :
It could be really useful having '_lockroot' as a third parameter on the 'loadMovie' class, with a 'true' default value.
tof69 said on Jul 11, 2005 at 6:54 AM :
I call a movie with a combobox inside, with loadmovie.
I put on the movie called :
this._lockroot = true;
Now the combobox works, but I have always a border when it is opened...
How Can i do for removing it?
No screen name said on Aug 12, 2005 at 9:38 AM :
tofo, try using this in the onload function: _focusrect = false;
No screen name said on Sep 24, 2005 at 3:41 PM :
Hi i nead help :)

I have a main movie clip how load into i_mc
loadmovieclip, and in the secand movie clip i have a preloading img.

when i load a movie i can see the interface bat i canot see a img loading
and in my output i can see :
Error opening URL "file:///D|/Documents%20and%20Settings/Administrator/Desktop/Kesher%5Fyami.com/New%5Fdesign%5Fkesherweb%5Fbase%5Fflash/pic_smool/img1.jpg"

please i need help here
veixj said on Jun 20, 2006 at 11:18 AM :
Using the MovieClipLoader class, I was unable to get _lockroot to work if I applied it to the container movie clip before loading the remote file into it. Works fine if I set _lockroot in the onLoadInit() event though. Dont' know if this applies to .loadMovie() as well, but I wouldn't be surprised.

 

RSS feed | Send me an e-mail when comments are added to this page | Comment Report

Current page: http://livedocs.adobe.com/flash/mx2004/main_7_2/00001522.html