Vraag niet waarom, maar op mijn schouders rust de verschrikkelijke taak een java-applet over een swf te leggen. Huilend en rillend ben ik aan deze klus begonnen
De swf hangt in een html en is een soort schil die verschillende andere swfjes inlaadt, maar de vraag was of de schil ook java-applets in kon laden. Ik heb aangegeven dat java niet in flash zelf kon, maar dat door middel van een iframe de applet over de swf gelegd kon worden zodat het leek alsof de applet in de schil hing.
Ik heb in de basis-html, waar de schil-swf in hangt, de volgende elementen toegevoegd:
met daaraan vast de volgende CSS:
De swf hangt in de html dmv de standaard code:
Nu is het niet de bedoeling dat de java-applet direct zichtbaar is. Het iframe moet dus door de schil-swf aan en uit gezet kunnen worden. Dat doe ik door middel van externalInterface in AS3 mbv de volgende javascript-functies:
...waarbij ik hide_iframe() al aanspreek in de body.onload van de html omdat de applet pas later zichtbaar moet worden.
Probleem is: hoe lelijk de constructie ook is, alles werkt prima in FireFox en Chrome. Ook IE8 laat het iframe zien wanneer nodig maar IE7 weigert dienst. Omdat de doelgroep toch nog aardig fan is van IE7, moet het ook in deze browser werken.
De swf hangt in een html en is een soort schil die verschillende andere swfjes inlaadt, maar de vraag was of de schil ook java-applets in kon laden. Ik heb aangegeven dat java niet in flash zelf kon, maar dat door middel van een iframe de applet over de swf gelegd kon worden zodat het leek alsof de applet in de schil hing.
Ik heb in de basis-html, waar de schil-swf in hangt, de volgende elementen toegevoegd:
HTML:
1
2
3
4
5
6
7
| <div id="topdiv"> <div id="container"> <iframe scrolling="no" frameborder="0" id="iframe_FI" src ="assets/java/javaholder.htm" width="890" height="390" allowtransparency="true"> <p>Your browser does not support iframes.</p> </iframe> </div> </div> |
met daaraan vast de volgende CSS:
Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| * { margin :0; padding :0; } html, body { height :100%; } body { text-align :center; } #topdiv { margin :0 auto; margin-top : 10px; position : absolute; z-index : 1000; background-color:transparent; top : 140px; width : 100%; } #container { margin :0 auto; text-align :center; width :890px; clear :left; } |
De swf hangt in de html dmv de standaard code:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
| <script language="JavaScript" type="text/javascript"> <!-- // Version check for the Flash Player that has the ability to start Player Product Install (6.0r65) var hasProductInstall = DetectFlashVer(6, 0, 65); // Version check based upon the values defined in globals var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision); if ( hasProductInstall && !hasRequestedVersion ) { // DO NOT MODIFY THE FOLLOWING FOUR LINES // Location visited after installation is complete if installation is required var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn"; var MMredirectURL = window.location; document.title = document.title.slice(0, 47) + " - Flash Player Installation"; var MMdoctitle = document.title; AC_FL_RunContent( "src", "playerProductInstall", "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"", "width", "100%", "height", "100%", "align", "middle", "id", "schil", "quality", "high", "bgcolor", "#f2ebc7", "name", "schil", "allowScriptAccess","always", "wmode","opaque", "type", "application/x-shockwave-flash", "pluginspage", "http://www.adobe.com/go/getflashplayer" ); } else if (hasRequestedVersion) { // if we've detected an acceptable version // embed the Flash Content SWF when all tests are passed AC_FL_RunContent( "src", "scil", "width", "100%", "height", "100%", "align", "middle", "id", "schil", "quality", "high", "bgcolor", "#f2ebc7", "name", "schil", "allowScriptAccess","always", "wmode","opaque", "type", "application/x-shockwave-flash", "pluginspage", "http://www.adobe.com/go/getflashplayer" ); } else { // flash is too old or we can't detect the plugin var alternateContent = 'Alternate HTML content should be placed here. ' + 'This content requires the Adobe Flash Player. ' + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>'; document.write(alternateContent); // insert non-flash content } // --> </script> <noscript> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="schil" width="100%" height="100%" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" allowScriptAccess="always"> <param name="movie" value="schil.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#f2ebc7" /> <param name="allowScriptAccess" value="sameDomain" /> <param name="wmode" value="opaque" /> <embed src="schil.swf" quality="high" bgcolor="#f2ebc7" width="100%" height="100%" name="schil" align="middle" play="true" loop="false" quality="high" allowScriptAccess="always" wmode="opaque" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"> </embed> </object> </noscript> |
Nu is het niet de bedoeling dat de java-applet direct zichtbaar is. Het iframe moet dus door de schil-swf aan en uit gezet kunnen worden. Dat doe ik door middel van externalInterface in AS3 mbv de volgende javascript-functies:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function show_iframe(){ var aaiFrame = document.getElementById('iframe_FI'); aaiFrame.style.display = 'block'; aaiFrame.height=390; } function hide_iframe(){ var aaiFrame = document.getElementById('iframe_FI'); aaiFrame.visibility='hidden' aaiFrame.height=0; } function change_iframe_src(url){ var aaiFrame = document.getElementById('iframe_FI'); aaiFrame.src = url } |
...waarbij ik hide_iframe() al aanspreek in de body.onload van de html omdat de applet pas later zichtbaar moet worden.
Probleem is: hoe lelijk de constructie ook is, alles werkt prima in FireFox en Chrome. Ook IE8 laat het iframe zien wanneer nodig maar IE7 weigert dienst. Omdat de doelgroep toch nog aardig fan is van IE7, moet het ook in deze browser werken.
[ Voor 39% gewijzigd door Murphy op 04-11-2010 10:56 . Reden: extra info ]