Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-09-2006, 02:23   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 62
Funktionsaufruf über HTML Link

Hallo!

Hat jemand ne Ahnung, wie man über einen HTML-Link eine Funktion im eingebetten swf aufruft?

Wäre über Hilfe sehr dankbar! Habe leider nix in der Suche gefunden...

LG
Katzenhaar ist offline   Mit Zitat antworten
Alt 18-09-2006, 02:43   #2 (permalink)
Web is a hobby
 
Benutzerbild von falconry
 
Registriert seit: Feb 2004
Ort: nähe Frankfurt
Beiträge: 339
Angry

Meiner Meinung nach kannst Du über HTML gar keine direkten Funktionen aufrufen.
Du kannst aber Variablen zwischen HTML besser JavaScript nach Flash übergeben.
Hier müsstest Du dann entweder mit Watch oder einer if-Abfrage die Var abfangen und dann eben eine Funktion aufrufen.

So würde ich da ran gehen. Kann aber sein, das hier jemand ist, der hierzu eine bessere ANtwort hat
__________________
Pessimisten sind Optimisten mit Lebenserfahrung

Geändert von falconry (18-09-2006 um 13:46 Uhr)
falconry ist offline   Mit Zitat antworten
Alt 22-11-2006, 12:05   #3 (permalink)
relayit.de
 
Registriert seit: Sep 2001
Beiträge: 427
also es gibt ja dieses Flash JavaScript Integration Kit, wie schon einige male erwaehnt heir im forum.
ich habs mir noch nicht konkret angeguckt, aber hat wohl definietere features als der workaround mit Setvariable siehe hier.
bin aber erst zu spaet drauf gestoßen

in der zwischenzeit habe ich den workaround aber etwas optimiert, da in der geposteten version nur funktionen im globalen namensbereich von dem flashfile aufrufbar waren.

falls es jemanden interessiert, hier noch die verbesserte version:

datei: JS2FHook.as
Code:
class JS2FHook extends MovieClip{

	function JS2FHook(){
		_root.js2f_function = "";
		_root.js2f_arg = "";
	}
	
	function onEnterFrame(){
		if (_root.js2f_function != "") {
			eval(_root.js2f_function)(_root.js2f_arg);
			_root.js2f_function = ""; _root.js2f_arg = "";
		}
	}

}
einfach einen leeren movieclip dieser klasse immer "sichtbar" in die stage packen und dazu folgende javascript-datei (nennen wir sie JS2F.js) erstellen:
Code:
function mObject(mName){
	if (navigator.appName.indexOf ("Microsoft") !=-1) return window[mName];
	else return document[mName];
}

function js2f(obj,name,arg) {
	mObject(obj).SetVariable("_root.js2f_function",name);
	mObject(obj).SetVariable("_root.js2f_arg",arg);
}
das sind die basisvoraussetzungen.
nun bettest du ein beliebiges flash-file in ein beliebiges html-file ein (zusammen mit den beiden dateien).
hierbei darauf achten, dass das object und embed tag im html uebereinstimmende id- und name-parameter besitzen und dann kann es schon losgehen. kleines beispiel:
HTML-Code:
<script type="text/javascript" src="JS2F.js"></script>
<object ... id="meinFilm">
    <embed .. src="meinFilm.swf" name="meinFilm"></embed>
</object>

<a href="JavaScript:js2f('meinFilm','_root.meinTestObjekt.meineTestFunktion','test')"> klick mich</a>
würde "meineTestFunktion" in meinem Testobjekt auf der root-ebene von meinFilm.swf mit dem zusätzlichen parameter "test" ausführen, wenn jemand auf den link klickt ...

mfg, martin.
__________________
hmmm.....

Geändert von japanitrat (22-11-2006 um 12:06 Uhr)
japanitrat ist offline   Mit Zitat antworten
Alt 01-04-2007, 14:25   #4 (permalink)
n00b
 
Registriert seit: Jun 2005
Beiträge: 271
hi Martin, sehr interessant. aber was meinst du mit
Zitat:
Zitat von japanitrat Beitrag anzeigen
einfach einen leeren movieclip dieser klasse immer "sichtbar" in die stage packen
??

kannst du ein einfache beisp. im as-code geben bitte?

gruß
phase
__________________
--
Don't eat yellow snow
phase ist offline   Mit Zitat antworten
Alt 01-04-2007, 14:36   #5 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
hi,

was japanitrat gepostet hat ist im Grunde genau das Gleiche, was falconry gemeint
hat. Man muss Variablen übergeben, welche von einer "Listener Funktion" ständig
abgefragt werden und je nach Inhalt der Variablen den weiteren Ablauf steuert.

Die Listener Funktion bei japanitrat ist eine onEnterFrame Funktion welche eben
ständig die Variablen abrägt. Ist also auch kein direkter Funktionsaufruf. Aber das
WorkAround ist dennoch schön, da es einem einen gewissen Aufwand abnimmt.

__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: ist offline   Mit Zitat antworten
Alt 01-04-2007, 18:01   #6 (permalink)
relayit.de
 
Registriert seit: Sep 2001
Beiträge: 427
phase: wie RK schon anmerkte, prueft die onEnterFrame-Funktion, ob ein wert gesetzt wurde. "sichtbar" heisst, dass der MovieClip aus der Library (dem die Klasse "JS2FHook" zugewiesen ist), in jedem Frame drin sein muss und _visible immer true sein muss, damit onEnterFrame auch wirklich immer aufgerufen wird. Dabei ist es voellig egal, ob du den MC ausserhalb deiner Stage platzierst oder innerhalb. Wichtig ist nur, dass er liegt und _visible = true ist (per default ist das auch so).

und leider kann ich dir kein Beispiel mit as-code geben, da alles, was du tun musst, nichts mehr mit code zu tun hat. du legst die dateien einfach so an, wie ich das beschrieben hab (JS2FHook.as entweder in das gleiche Verzeichnis wie deine fla oder in ein verzeichnis, das in deinen Klassenpfaden definiert wurde).
Dann erstellst du in der Library einen neuen MovieClip, gibst ihm ein beliebigen Namen und schreibst in den Eigenschaften (Erweitert bzw Verknüpfung) unter "AS 2.0-Klasse:" folgendes rein: "JS2FHook".
Dann ziehst du diesen MovieClip irgendwo auf deine Stage (am besten oberstes level _root, eigene Ebene, ein Schluesselbild, was sich ueber die ganze laufzeit erstreckt) und dann laeuft das und du kannst jede funktion innerhalb deines swf's mit javascript aufrufen.
__________________
hmmm.....

Geändert von japanitrat (01-04-2007 um 22:06 Uhr)
japanitrat ist offline   Mit Zitat antworten
Alt 02-04-2007, 19:53   #7 (permalink)
n00b
 
Registriert seit: Jun 2005
Beiträge: 271
Zitat:
Zitat von japanitrat Beitrag anzeigen
...
Dann erstellst du in der Library einen neuen MovieClip, gibst ihm ein beliebigen Namen und schreibst in den Eigenschaften (Erweitert bzw Verknüpfung) unter "AS 2.0-Klasse:" folgendes rein: "JS2FHook".
Dann ziehst du diesen MovieClip irgendwo auf deine Stage (am besten oberstes level _root, eigene Ebene, ein Schluesselbild, was sich ueber die ganze laufzeit erstreckt) und dann laeuft das und du kannst jede funktion innerhalb deines swf's mit javascript aufrufen.

genau so hatte ich es gemacht aber leider klappt es nciht. ich habe folgendes im swf:

Code:
function testFunc(n){
	
	_root.test_mc._x = n;
}
und einen passenden test_mc und einen mc mit JS2FHook unter AS 2.0 Klasse in den Eigenschaften.

mein html sieht so aus:
Code:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>JS2F</title>
<script type="text/javascript" src="JS2F.js"></script>
</head>
<body bgcolor="#ffffff">
<!--Im Film verwendete URLs-->
<!--Im Film verwendeter Text-->
<!-- saved from url=(0013)about:internet -->
<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="550" height="400" id="JS2F" align="middle" name="JS2F">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="JS2F.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="JS2F.swf" quality="high" bgcolor="#ffffff" width="550" height="400"  align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"  id="JS2F" name="JS2F" />
</object>
<a href="javascript:js2f('JS2F','_root.testFunc','200')"> klick mich</a>
</body>
</html>
mit klick auf den link passiert gar nichts. was mache ich falsch?

gruß,
phase
__________________
--
Don't eat yellow snow
phase ist offline   Mit Zitat antworten
Alt 02-04-2007, 20:25   #8 (permalink)
relayit.de
 
Registriert seit: Sep 2001
Beiträge: 427
okay, also hab ich mich doch noch zu umstaendlich ausgedrueckt...
zu deiner html-datei:
die gleiche id doppelt zu benutzen (object und embed) ist nicht html-konform.
das gleiche name zu benutzen fuehrt auch zu mehrdeutigkeiten.

also einfach so machen, wie in dem beispiel:
im object-tag id="x"
im embed-tag name="x"

okay?
__________________
hmmm.....

Geändert von japanitrat (02-04-2007 um 20:44 Uhr)
japanitrat ist offline   Mit Zitat antworten
Alt 03-04-2007, 10:52   #9 (permalink)
n00b
 
Registriert seit: Jun 2005
Beiträge: 271
Zitat:
Zitat von japanitrat Beitrag anzeigen
okay, also hab ich mich doch noch zu umstaendlich ausgedrueckt...
oder ich hab einfach nciht aufmerksam genug gelsen ;-) jetzt klappts, danke!
__________________
--
Don't eat yellow snow
phase ist offline   Mit Zitat antworten
Alt 19-04-2007, 13:33   #10 (permalink)
n00b
 
Registriert seit: Jun 2005
Beiträge: 271
hat sich erledigt. funktioniert super!
__________________
--
Don't eat yellow snow

Geändert von phase (19-04-2007 um 13:37 Uhr)
phase ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele