Avatar billede hoppe11 Nybegynder
17. juni 2007 - 01:57 Der er 14 kommentarer og
1 løsning

element fra streng

jeg har en variabel som indeholder en "placering" af et element som en tekst streng til senere brug

eks.
var min_var = 'top.frame.noget';

hvordan kan jeg lave min tekst streng om til det pågældende element så jeg kan bruge det til noget?
Avatar billede roenving Novice
17. juni 2007 - 04:16 #1
Øeh, hvorfor opbevarer du det ikke som et element ?-)

var min_var = top.frame.noget;

...

min_var.style.display = "block";
Avatar billede hoppe11 Nybegynder
17. juni 2007 - 11:13 #2
det er en værdi jeg opretter i et array, og hvor jeg opretter mit array er placeringen af elementet ikke korrekt.. det er måske en skidt måde at bære sig ad?
Avatar billede hoppe11 Nybegynder
17. juni 2007 - 11:17 #3
eller placeringen er jo sådan set absolut idet top er angivet først, men synes ikke jeg kan få det til at virke? sikkert heller ikke der fejlen ligger
Avatar billede hoppe11 Nybegynder
17. juni 2007 - 11:18 #4
nej vent :)

jeg er lige vågnet og havde lige glemt hvorfor jeg gjorde som jeg gjorde.. det er fordi mit element ikke er loaded på det pågældende tidspunkt og elementet derfor giver undefined
Avatar billede hoppe11 Nybegynder
17. juni 2007 - 11:27 #5
var swf_obj = {
    'swf_top' : {
        'dst' : 'top.frame_top.swf_top',
        'loaded' : false
    }
};
Avatar billede hoppe11 Nybegynder
17. juni 2007 - 17:14 #6
det er måske ikke muligt? :)
Avatar billede roenving Novice
17. juni 2007 - 23:43 #7
Nahh ...

-- principielt er det ikke muligt, men også den slags kan jo tweakes, hvis man bare har lidt tålmodighed ...

-- f.eks. kan du jo simpelthen bytte din dst-property ud med objektet ved at lave noget manipulation, hvis den ikke repræsenterer objektet:

if(typeof swf_obj.swf_top.dst != "object")
  swf_obj.swf_top.dst = eval(top.frame_top.swf_top);

-- men uden at have en ordentlig forståelse af sammenhængen i din kode (og din html !-) er det rent gætteværk !o]
Avatar billede hoppe11 Nybegynder
18. juni 2007 - 00:18 #8
Min kode ser nogenlunde således ud:

Jeg skal sende noget data til et swf object, men før jeg kan det skal det jo være loaded færdigt :)

Idet mit swf object er loadet kører den min swf_loaded(), hvor herefter jeg via data2swf() kan loade mine data ind i swf objectet

Jeg ved ikke om der findes en bedre måde at gøre det på..

Måden jeg kommunikere mellem flash og js er gennem et eksternt interface i flash

var swf_obj = {
    'swf_top' : {
        'elm' : 'top.frame_top.swf_top',
        'loaded' : false
    }
};

function swf_loaded(swf_name)
{
    swf_obj[swf_name]['loaded'] = true;
}

function data2swf(swf_name, type, data)
{
    var obj = top.frame_top.swf_obj[swf_name];
   
    if(obj['loaded']) obj['elm'].import_data(type, data);
    else setTimeout('data2swf(\''+swf_name+'\', \''+type+'\', \''+data+'\')', 100);
}
Avatar billede hoppe11 Nybegynder
18. juni 2007 - 19:03 #9
Jeg har ændret min kode lidt, men nu virker det kun i Firefox?

alert i swf_loaded() bliver kørt i både IE og FF, men alert i data2swf() køres ikke i FF

var swf_obj = {};

function swf_loaded(swf_name)
{
    swf_obj[swf_name] = true;
   
    alert('set:\nswf_obj['+swf_name+'] = '+swf_obj[swf_name]);
}

function data2swf(swf_name, type, data)
{
    var loaded = top.frame_top.swf_obj[swf_name];
   
    var elm;
    if(swf_name == 'swf_top') elm = top.frame_top[swf_name];
   
    if(loaded)
    {
        elm.import_data(type, data);
       
        alert('data2swf');
    }
    //else setTimeout('data2swf(\''+swf_name+'\', \''+type+'\', \''+data+'\')', 100);
}
Avatar billede hoppe11 Nybegynder
18. juni 2007 - 20:11 #10
desuden tror jeg heller ikke den sidste linje jer escaper er skrevet korrekt?

//else setTimeout('data2swf(\''+swf_name+'\', \''+type+'\', \''+data+'\')', 100);

parametrene i min funktion er følgende:
swf_name = string
type = variabel
data = variabel, obejct eller array
Avatar billede hoppe11 Nybegynder
18. juni 2007 - 21:06 #11
Bare lige mig igen.. Undskyld jeg er lidt utålmodig, men det er ret irriterende jeg ikke kan få det til at virke!

:)

Jeg tror jeg kommer tættere og tættere på en løsning, men problemet er stadig ikke løst.. Jeg har fået det til at virke i både IE og FF - dog med et par undtagelser

I IE ser det umiddelbart ud til at virke uden problemer, men hvis data2swf() bliver kaldt igen i FF via settimeout bliver mit swf object ikke opdateret

Som sagt virker det fint, så længe data2swf() ikke kaldes igen via settimeout :)

eks. (hvis data2swf() kaldes via settimeout)
Første gange min alertbox kommer til syne bliver følgende udskrevet:
loaded = undefined
elm = [object HTMLEmbedElement]

Anden gang min alertbox kommer til syne bliver følgende udskrevet:
loaded = true
elm = [object HTMLEmbedElement]

- men mit swf object bliver ikke opdateret

kode:
--------------------
var swf_obj = {};

function swf_loaded(swf_name)
{
    swf_obj[swf_name] = true;
}

function data2swf(swf_name, type, data)
{
    var loaded = top.frame_top.swf_obj[swf_name];
   
    var elm;
    if(swf_name == 'swf_top') elm = top.frame_top.document[swf_name];
   
    alert('loaded = '+loaded+'\nelm = '+elm);
   
    if(loaded) elm.import_data(type, data);
    else setTimeout('data2swf("'+swf_name+'", "'+type+'", "'+data+'")', 100);
}
Avatar billede hoppe11 Nybegynder
18. juni 2007 - 21:19 #12
- hvis jeg tvinger IE ud i en settimeout bliver resultatet det samme som i FF
Avatar billede hoppe11 Nybegynder
20. juni 2007 - 19:16 #13
jeg fandt en løsning :)

setTimeout(data2swf, 100, swf_name, type, data);

roenving > lav et svar :)
Avatar billede roenving Novice
22. juni 2007 - 00:38 #14
Oki '-)
Avatar billede roenving Novice
22. juni 2007 - 16:22 #15
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester