I’ve been building an app where the size of the flash area is going to change beyond the bounds of the browser window at certain points – but I do not want to use flash scrollbars, as you’re already in a browser and as a user I much prefer the browsers scrollbar over dinky wee extra ones which don’t nessessarily act in the same fashion as i am accustomed – much nicer to use the same one you’ve already got!
So! What you do is call a javascript function which resides on the page that holds your movie with ExternalInterface.
So, step by step:
1. Add your external interface call into your flash movie, when you want to resize the stage.
ExternalInterface.call("setFlashHeight", variableToChangeHeightTo);
2. Add stage scale code to stop the stage rescaling willy-nilly with the size of its embedded area (unless you want it to!) This code keeps the 100% scale and keeps it at the top of the stage area:
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
3. Go into your flashfile.html or whatever you’ve called it, the holder of the swf, and plug this javascript function in the header:
<script language="javascript">
// this script is to resize the emb object code when the content of the swf extends beyond the bottom of the page.
// borrowed and edited from http://www.davidortinau.com/blog/2009/07/
function setFlashHeight(newHeight)
{
var viewportwidth;
var viewportheight;
// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
if (typeof window.innerWidth != 'undefined')
{
viewportwidth = window.innerWidth,
viewportheight = window.innerHeight
}
// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
else if (typeof document.documentElement != 'undefined'
&& typeof document.documentElement.clientWidth !=
'undefined' && document.documentElement.clientWidth != 0)
{
viewportwidth = document.documentElement.clientWidth,
viewportheight = document.documentElement.clientHeight
}
// older versions of IE
else
{
viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
viewportheight = document.getElementsByTagName('body')[0].clientHeight
}
document.getElementById('flashContainer').style.height = (viewportheight > newHeight) ? viewportheight + 'px' : newHeight + 'px';
}
</script>
Note the ‘flashContainer’ reference there – that is the name of the div that the javascript resizes (it doesn’t resize the flash).
4. In your flash embed code, both in the javascript and the no-script code, change the height references from a fixed number (if they are) to 100%.
<embed src="index.swf" quality="high" bgcolor="#171717" width="1018" height="100%" name="index"
5. Wrap the entire flash code area within the flashContainer div.
<div align="center" id="flashContainer">[FLASH CODE GOES IN HERE]</div>
Should be sorted.
Massive borrowing from here:
http://www.davidortinau.com/blog/2009/07/
Oh and also, don’t forget you have to import these classes into your document class / fla (maybe fla):
import flash.external.ExternalInterface; import flash.display.StageAlign; import flash.display.StageScaleMode;
Leave a Reply