Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> DOM vs document.write, Dlaczego skrypt działa poprzez document.write a nie poprzez metody DOM
konys
post 4.07.2007, 11:11:38
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 7
Dołączył: 5.11.2005

Ostrzeżenie: (0%)
-----


Chciałbym dodać plik multimedialny wmv na stronę i obsługiwać zdarzenia (np. PlayStateChange). Poniżej przedstawiam kod:
  1. <head>
  2.  
  3. </head>
  4. <body>
  5. <!-- WERSJA A (DOM) --><!-- <script>
  6. script = document.createElement('script');
  7. script.setAttribute('for', 'bc_player');
  8. script.setAttribute('event', 'PlayStateChange');
  9. script.text = 'alert("blabla");';
  10. document.body.appendChild(script);
  11. </script>-->
  12. <!-- WERSJA B --><!-- (document.write) <script>
  13. src = '<script for="bc_player" event="PlayStateChange">'
  14. + 'alert ("blehbleh");'
  15. + '</scr' + 'ipt>';
  16. document.write(src);
  17. </script>
  18. -->
  19. <!-- WERSJA C (statyczny kod) --><!-- <script for="bc_player" event="PlayStateChange">
  20. alert('bleble');
  21. </script>
  22. -->
  23. <object id="bc_player" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="320" height="240">
  24. <param name="URL" value="http://www.surfelf.com/Fla/pinguin.wmv">
  25. </object>
  26. </body>
  27. </html>

Gdy odkomentuję wersję A czyli dołączenie skryptu poprzez umieszczenie go w nowym węźle DOM - obsługa zdarzeń nie zadziała. Z kolei działają zarówno wersja B (skrypt dodawany poprzez document.write) oraz C (skrypt umieszczony bezpośrednio w HTML). Testowałem toto pod IE7 - dlaczego nie działa mi wersja A?
Go to the top of the page
+Quote Post
Wiktor.
post 5.07.2007, 08:56:04
Post #2





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 4.07.2007

Ostrzeżenie: (0%)
-----


Ja mam trochę inny problem, ale myślę, że w jakiś sposób związany z Twoim. Mianowicie przerabiałem dla swoich potrzeb klasę menu napisaną w JS. Instancja tej klasy zawiera uchwyt na węzeł DOM (uzyskany dzięki document.getElementById i wpisany w zmienną). Wszystko niby jest ok, po odwołaniu się do zmiennej zawierającej uchwyt można odczytać np. innerHTML (nawet go zmienić), ale nie ciągnie to za sobą efektów na stronie - tak jakby skrypt działał na kopii jakiejś... Przypuszczam, że może mieć to związek z tym, że po wpisaniu uchwytu w zmienną są jeszcze tworzone inne węzły.. być może "psuje" to poprzednie odwołania (ciekawostką jest to, że odwołanie się przez zmienną działa dla OSTATNIO stworzonego dynamicznie węzła).
Acha, orginalnie skrypt działał wypisując HTML'a poprzez document.write()... i wtedy działało smile.gif

Pozdrawiam
Go to the top of the page
+Quote Post
gekon
post 10.07.2007, 23:32:30
Post #3





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

Ostrzeżenie: (0%)
-----


To-to powinno działać pod wszystkim oprócz IE. Silnik tej wspaniałej przeglądarki nie rozróżnia instrukcji 'for' od atrybutu DOM (można się spierać czy słusznie czy nie, ale byłyby to czysto teoretyczne rozważania). Rowiązaniem jest użycie specjalnej składni 'script.htmlFor' zamiast metody setAttribute.


--------------------
Pokaż kod = Pokaż CAŁY kod, najlepiej działający na jakimś serwerze.
Fanatycy | glazar.info | semantyka | HTML i XHTML FAQ
Go to the top of the page
+Quote Post
konys
post 11.07.2007, 02:28:56
Post #4





Grupa: Zarejestrowani
Postów: 100
Pomógł: 7
Dołączył: 5.11.2005

Ostrzeżenie: (0%)
-----


Dzięki!!! Dzięki!!! Dzięki!!!

A już myślałem, że całkiem osiwieję...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 8.05.2025 - 13:05