Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-08-2004, 17:47   #1 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Key.Listener | focus() | ESC | Mac OS / Win

Hi,

auf dieser Seite habe ich im Flashfilm eine Funktion definiert, welche beim Gedrückthalten der ESCAPE Taste die Farben durcheinander haut und beim Loslassen wieder die Ursprungsfarben herstellt.

Ich habe auch mittels onLoad Handlers im Body Tag den Focus auf die swf gesetzt.

Wenn ihr es selbst einmal testen wollt, einfach die o.g. URL aufrufen, dann, wenn der Lauftext erscheint einfach oben Links auf den aktiven Button klicken. Ihr gelangt dann auf die Mainsite (main.swf), wo dann die besagte Funktion definiert ist.

Unter Mac OS X 10.3.4 mit Safari und Firefox funktioniert es, hingegen unter Windows 98, XP mit IE, Firefox nicht.

Hier der wesentliche Auszug aus dem Actionscript

PHP-Code:
//Actionscript 1.0
EscDwn=new Object();
EscUp=new Object();
Key.addListener(EscDwn);
EscDwn.onKeyDown = function() 
    {
    if (
Key.isDown(Key.ESCAPE)) 
        {        
        var 
chaos=function ()
            {
            
_global.chaos_speed==true clearInterval(chaos_speed) :0;
  
//actions zur übersichtlichkeit entfernt
           
};
        var 
chaos_speed=setInterval(chaos100);
        
Key.removeListener(EscDwn);
        
Key.addListener(EscUp);
        }
    };
EscUp.onKeyUp=function() 
    {
    
clearInterval(chaos_speed);
    
delete chaos;
  
//actions zur übersichtlichkeit entfernt
    
Key.addListener(EscDwn);
    
Key.removeListener(EscUp);
    }; 
Den HTML-Code könnt ihr auf der Seite auch direkt einsehen.

Woran liegt das?

Gibt es reservierte Tasten, die man nicht benutzen darf?

Ich habe für diese Seite ein Spiel programmiert, welches fast fertig ist. Dieses wird mittels den Pfeiltasten gesteuert… gleiches Problem.


Liebe Grüße

Yves
  Mit Zitat antworten
Alt 08-08-2004, 14:56   #2 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Weiss denn echt niemand woran das liegen könnte?

Yves
  Mit Zitat antworten
Alt 08-08-2004, 15:47   #3 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
ich hab keine dose. vielleicht wird unter windows (bzw. den browsern in windows) das ESCAPE generell für etwas anderes benützt??? und deshalb erst garnicht an das swf weiter gereicht?

nimm halt eine andere taste. z.b. die "1".
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 08-08-2004, 15:55   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 13
Also bei mir funktioniert es,

WinXP - Mozilla

Müsste ja dann mit Firefox auch gehen, mit IE geht es bei mir nicht.
weltraumpfleger ist offline   Mit Zitat antworten
Alt 08-08-2004, 18:09   #5 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi.
Eine andere Taste nehmen… nur… was ist dann mit dem Kontaktformular? Soll ja nicht beim Ausfüllen dieses Triggern.
Also bleibt dann ja nicht mehr viel übrig.


Liebe Grüße

Yves

Geändert von 409coffeemaker (08-08-2004 um 18:11 Uhr)
  Mit Zitat antworten
Alt 09-08-2004, 04:15   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..was ist dann mit dem Kontaktformular.."
ja woher soll ich das wissen. ich kenne doch deine 10.000 internetseiten nicht und auch nicht, was du vorhast.

was für einen sinn macht es, auf einer formularseite, wenn es
"..beim Gedrückthalten der ESCAPE Taste die Farben durcheinander haut und beim Loslassen wieder die Ursprungsfarben herstellt.." ???
das eröffnet ganz neue möglichkeiten bei der formularausfüllung :-)))


dein eigentliches problem ging aber nicht um eine formularseite (die du erst jetzt erwähnt hast), sondern um die nichterkennung von tasten.
das mit der 1 war ja nur ein beispiel. du könntest auch die 5 nehmen ;-)

ich denke aber, das problem ist garkein tastenproblem. sonnst müsste es ja jeder haben. weltraumpfleger hat's zb nicht.

die tastenkodes werden nur dann zum swf geleitet, wenn das durch einmaliges anklicken aktiv gemacht wurde - sonst nicht.
kann ja sein, das diese onLoad-geschichte garnicht funktioniert? (onLoad ist schon klar. aber kommt dieses event wirklich erst, nachdem das swf komplett geladen ist? das event dürfte dann zb bei gestriemten sounds recht spät kommen - muss ich echt mal ausprobieren.)
und versuch mal: this.mainobject.focus();
document sollte zwar, ist aber nicht immer verfügbar.

und lass mal probeweise das document.write weg. eventuell wird dadurch das mainobject erst beim "nächsten mal" bekannt.


nachschlag:
und wenn du bei der html-seite auf den weissen rand klickst, dann ist dein swf auch nicht mehr im focus.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (09-08-2004 um 04:24 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 09-08-2004, 09:31   #7 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi… gestern abend war wohl aufgrund der Hitze Freiduschen mit Peter Lustig ;)
Zitat:
Zitat von hgseib
"..was ist dann mit dem Kontaktformular.."
ja woher soll ich das wissen. ich kenne doch deine 10.000 internetseiten nicht und auch nicht, was du vorhast.
Selbstredend… es ist hier von einer Internetseite die Rede. Und wenn ich hier die 1 als Key für den Listener nehme, dann schrubben die Farben dann bei der Eingabe der Telefonnummer, die zb eine 1 enthalten könnte ;).
Jetzt sag nich: „Und was, wenn er kein Telefon hat?“ ;)

Zitat:
Zitat von hgseib
was für einen sinn macht es, auf einer formularseite, wenn es
"..beim Gedrückthalten der ESCAPE Taste die Farben durcheinander haut und beim Loslassen wieder die Ursprungsfarben herstellt.." ???
das eröffnet ganz neue möglichkeiten bei der formularausfüllung :-)))
Gar keinen. Darum möchte ich das auch auf der Escape-Taste haben. Es ist global verfügbar, nicht nur auf der Formularseite. Schau dir doch mal die Seite einfach an…

Zitat:
Zitat von hgseib
dein eigentliches problem ging aber nicht um eine formularseite (die du erst jetzt erwähnt hast), sondern um die nichterkennung von tasten.
Exakt. Und nur unter Windows.

Zitat:
Zitat von hgseib
ich denke aber, das problem ist garkein tastenproblem. sonnst müsste es ja jeder haben.
Interessante Schlußfolgerung ;)

Ich vermute, das es ein Browserspezifisches Problem mit der „Tastenweitergabe“ ist.

Zitat:
Zitat von hgseib
weltraumpfleger hat's zb nicht.
Die haben nur Grüne wenn Das auf dem stein macht Wasser!

Zitat:
Zitat von hgseib
die tastenkodes werden nur dann zum swf geleitet, wenn das durch einmaliges anklicken aktiv gemacht wurde - sonst nicht.
Aber selbst wenn ich im WIN IE die swf anklicke, funktioniert es nicht.

Zitat:
Zitat von hgseib
kann ja sein, das diese onLoad-geschichte garnicht funktioniert? (onLoad ist schon klar. aber kommt dieses event wirklich erst, nachdem das swf komplett geladen ist? das event dürfte dann zb bei gestriemten sounds recht spät kommen - muss ich echt mal ausprobieren.)
Ja, ich bin mir recht sicher das die onLoad Geschichte funktioniert. Habe es aber auch mal mit this und ohne document.write probiert. Keine Veränderung. Soviel ich weiß, bekommt das Object direkt den Focus beim Laden, sobald auch nur 1 Byte da ist. Und das geht recht schnell. Und was hat das mit streamed Sounds zu tun? Die werden in der SWF dynamisch zu Laufzeit dazugeladen, unszwar nachdem die SWF geladen worden ist.

Zitat:
Zitat von hgseib
und wenn du bei der html-seite auf den weissen rand klickst, dann ist dein swf auch nicht mehr im focus.
Exakt.


Yves
  Mit Zitat antworten
Alt 09-08-2004, 10:21   #8 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Mal vielleicht ganz interessant…

Firefox Javascript Console sagt folgendes:

Error: this.mainobject has no properties

oder

Error: window.document.mainobject.focus is not a function

oder

Error: document.mainobject.focus is not a function


Weiß jemand warum? Als Func () ist ja ja korrekt definiert.


Yves
  Mit Zitat antworten
Alt 09-08-2004, 22:20   #9 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..WIN IE die swf anklicke, funktioniert es nicht.."
tja :-( hat nicht Peter Lustig (alias fenster bill) das windows gemacht - beim Freiduschen?

bei WIN IE, alle tasten oder nur bestimmte?
da es ja "nur" eine spass-funktion ist: teste zb auf ctrl-1 oder sonst eine tastenkombination. das wird ja wohl keiner in ein formular eingeben.
oder erkenne eine wort. zb nach der eingabe von "409coffeemaker" geht das geflimmere für 5 selkunden los. - ist nur ein vorschlag.



"..Firefox Javascript Console sagt folgendes: Error:.."
alle browser sind grosser misst und praktisch für umsonst. bei wem soll man sich da beschweren?
ich sagte ja schon, das document z.b. nicht immer existiert. ähnlich: in einem frameset ist top nicht gleich top. da benütze ich lieber z.b. parent.parent.parent.irgendwas


ich benütze übrigens mit vorliebe die function von MM:
versuchs mal damit:
var vObj=MM_findObj('mainobject');

Code:
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n);	return x;
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 10-08-2004, 01:07   #10 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
Zitat von hgseib
bei WIN IE, alle tasten oder nur bestimmte?
Space funktionierte mal… in der SWF… hatte ein Freund mal getestet.
Hab leider(?) keine Dose da zum testen…

Zitat:
Zitat von hgseib
da es ja "nur" eine spass-funktion ist: teste zb auf ctrl-1 oder sonst eine tastenkombination.
Tastenkombination klingt gut. Ich denke, da nehme ich dann alphabetische Tasten… Schade wäre nur, wenn es auf Escape nicht geht. Ist halt sehr einprägsam… und irgendwie auch semantisch verwandt… Escape – flüchten, ausbrechen aus dem gewohnten Layout.

Zitat:
Zitat von hgseib
"..Firefox Javascript Console sagt folgendes: Error:.."
alle browser sind grosser misst und praktisch für umsonst. bei wem soll man sich da beschweren?
Gar nicht… am besten einer Dev Group joinen und (versuchen) besser machen

Zitat:
Zitat von hgseib
ich sagte ja schon, das document z.b. nicht immer existiert. ähnlich: in einem frameset ist top nicht gleich top. da benütze ich lieber z.b. parent.parent.parent.irgendwas
Exakt. Daher habe ich es relativ mit this probiert. Wie du auch an den Outputs der Javascript Konsole sehen kannst.

Wichtig wäre jetzt, ein Script zu verfassen, das wirklich funktioniert… sonst ist der Fehler irgendwie „moving target“…

Zitat:
Zitat von hgseib
ich benütze übrigens mit vorliebe die function von MM:
Ich hab sie mal ein wenig anders formatiert… könntest du mir die func erklären, bevor ich diese einbaue?

PHP-Code:
//Javascript
function MM_findObj(nd
    {
    var 
p,i,x;  
    if(!
d
        {
        
d=document;
        } 
    if((
p=n.indexOf("?"))>0&&parent.frames.length
        {
        
d=parent.frames[n.substring(p+1)].documentn=n.substring(0,p);
        }
    if(!(
x=d[n])&&d.all
        {
        
x=d.all[n];
        }
    for (
i=0;!x&&i<d.forms.length;i++) 
        {
        
x=d.forms[i][n];
        }
    for(
i=0;!x&&d.layers&&i<d.layers.length;i++) 
        {
        
x=MM_findObj(n,d.layers[i].document);
        }
    if(!
&& d.getElementById
        {
        
x=d.getElementById(n);
        }     
    return 
x;
    }
var 
vObj=MM_findObj('mainobject'); 
Du gibst also nur n als Funktionsparameter mit…

Dann wäre d=document. Den Teil mit parent.frames verstehe ich nicht.

Irgendwie wird da etwas mit Forms, Frames, Layers gemacht… eine kurze Erklärung wäre nett.

Liebe Grüße

Yves

(…und danke für deine Mühe!)
  Mit Zitat antworten
Alt 10-08-2004, 01:49   #11 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi, ich hab das mal gerade einen Kollegen testen lassen… auch mit deinem Script.

Funktioniert ebenfalls nicht.


Bitte teste nun nochmal die Seite unter dem o.g. Link, ich habe nun für Escape mal den Tastaturcode benutzt. Wenn ich den Listener quasi für 'a' definiere, klappt es.
Da man eh einmal in die swf klicken kann, um auf die Mainpage zu gelangen, vernachlässige ich jetzt erstmal die Focus() Sache, bis ich einen überall funktionierenden Keycode habe.

Es liegt nun als an Escape… und dessen Ansprache im Browser.

An alle anderen… bitte testet nochmal und gebt kurzes Feedback…
Was ich bei Tastenkombis bemerkt habe… da kommt es ja auch wieder auf die Reihenfolge an… shift+ctrl != ctrl+shift…

Yves
  Mit Zitat antworten
Alt 10-08-2004, 02:01   #12 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hier nochmal zum Focus… absolut auf das mindeste reduziert…

Beispiel Listener der die Taste a abfragt.

Ohne document.write() & co…

Wie kriege ich da nun ohne auf die SWF zu klicken den focus auf die SWF?

Liebe Grüße

Yves
Angehängte Dateien
Dateityp: zip Developement.zip (3,3 KB, 2x aufgerufen)
  Mit Zitat antworten
Alt 10-08-2004, 02:55   #13 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..ich benütze übrigens mit vorliebe die function von MM:.."
MM == MacroMedia. das ist nicht meine!!! den code hängt zb dreamwaver drann, wenn man behaviors benützt. und der code ist chaotisch == nicht zum erklären gedacht (dafür schön kompakt). da ist halt alles drinn:
.all == alte IE
.getElementById == neuere browser mit DOM
der rest == NC
und der name wird überall gesucht. in layers in forms usw. -deshalb müssen auch alle namen unterschiedlich sein- und in allen frames hoch und runter. das ist dann der rekursive aufruf:
x=MM_findObj(n,d.layers[i].document);
der den 2. parameter benützt. functioniert halt mit allem (soweit ich das kenne).

allerdings, wenn ich mir das jetzt so betrachte: object bzw. embed ist nicht dabei. lese aber, das die mit getElementById erfasst werden!?

dann lese ich noch (betrifft zwar textfelder, aber was solls):
"..wenden Sie die Methoden focus() und select() nacheinander .. über die Methode setTimeout() auf. Auf diese Weise können Sie gewährleisten, dass IE/Windows die Anweisungen in der richtigen Reihenfolge ausführt. ."

-----------------
du könntest zb in javascript ein onKeyPress einbauen, um zu testen, wo das ESC verlohren geht. schon im browser oder erst im SWF.

-----------------
"..Bitte teste nun nochmal die Seite.."
wie schon weiter oben geschrieben: "ich hab keine dose."
und
Developement.zip => dekomprimierung fehlgeschlagen (mac stuffix deluxe 8.0.2)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (10-08-2004 um 02:57 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 10-08-2004, 10:25   #14 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Moin Seib,
Zitat:
Zitat von hgseib
allerdings, wenn ich mir das jetzt so betrachte: object bzw. embed ist nicht dabei. lese aber, das die mit getElementById erfasst werden!?
Ich habe versucht die MM Funktion zu nutzen… tuts aber auch nicht.

Zitat:
Zitat von hgseib
dann lese ich noch (betrifft zwar textfelder, aber was solls):
"..wenden Sie die Methoden focus() und select() nacheinander .. über die Methode setTimeout() auf. Auf diese Weise können Sie gewährleisten, dass IE/Windows die Anweisungen in der richtigen Reihenfolge ausführt. ."
Also einen Timeout von 3 Sekunden, der danach fokusiert?


Zitat:
Zitat von hgseib
du könntest zb in javascript ein onKeyPress einbauen, um zu testen, wo das ESC verlohren geht. schon im browser oder erst im SWF.
Wie?




Liebe Grüße

Yves
Angehängte Dateien
Dateityp: zip Developement.zip (3,9 KB, 2x aufgerufen)

Geändert von 409coffeemaker (10-08-2004 um 10:31 Uhr)
  Mit Zitat antworten
Alt 10-08-2004, 10:48   #15 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
So gehts nicht…

PHP-Code:
<html>
<
head>
<
meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<
meta http-equiv="expires" content="0">
<
meta http-equiv="pragma" content="no-cache">
<
script language="javascript" type="text/javascript">
function 
delayedFocus() 
    {
    
setTimeout("this.mainobject.focus()",2000)
    }
</script>
</head>
<body onload="javascript:delayedFocus();"> 

<table width="100%" height="100%">
    <tr>
        <td align="center" valign="middle">
            <table>
                <tr>
                    <td>            
                        <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400" id="mainobject" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
                        <param name="movie" value="keylistener.swf">
                        <param name="quality" value="best">
                        <embed src="keylistener.swf" width="550" height="400" name="mainobject" quality="best" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
                        </embed>
                        </object>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table> 
</body>
</html> 

Yves
  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:22 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele