Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [FF] Problem z podmianą źródła kodu JS, Firefox jakoś dziwnie radzi sobie z kodem JS generowanym przez .php
m.mix
post 7.11.2008, 08:45:16
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 21.11.2007

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


Witam,
mam pewien problem z podmianą źródła kodu skryptu - żeby było jaśniej podam przykład:
plik test.php - jakiaś tam sobie stronka:

  1. <script id=skrypt_java></script>
  2. <script id=skrypt_pom>
  3. function GenerujLink() {
  4. var dane=document.getElementById('pole').value;
  5. document.getElementById('skrypt_java').src='./skrypt.php?zmienna='+dane;
  6. }
  7. </script>
  8. <input type=text id=pole>
  9. <input type=button value=Wcisnij onclick="GenerujLink()">
  10. </body>
  11. </html>


i drugi plik - który ma za zadanie wygenerować kod JS:

Kod
<?php
print("alert('Wpisales: ".$_GET[zmienna]."');");
?>


No i wszystko działa pięknie, ale tylko raz sad.gif tzn po naciśnięciu przycisku piękny alercik wyskakuje, ale juz po naciśnięciu drugi raz przeglądarka nie interpretuje kodu. O dziwo, w IE wszystko działa tak jak oczekuję, czyli za każdym razem na nowo generowany jest kod, przeglądarka go interpretuje i wyświetla alert. I teraz moje pytanie - jak zmusić FF żeby wykonał kod skryptu, który został podmieniony??

Będę wdzięczny za szybką odpowiedź smile.gif
Go to the top of the page
+Quote Post
bregovic
post 7.11.2008, 10:59:52
Post #2





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Pfffft... na twoim miejscu odpuściłbym sobie ten koszmarek, i zainteresował się np jQuery.getScript...


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
m.mix
post 7.11.2008, 11:28:54
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 21.11.2007

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


No tak, z tym że to jest tylko przykład żeby było wiadomo o co chodzi.. w swoim projekcie ten zagnieżdżony skrypt przetwarza mi informacje z bazy danych, generuje mnóstwo obiektów i w ogóle jest mocno rozbudowany - stąd POTRZEBUJE żeby był generowany przez php sad.gif
Go to the top of the page
+Quote Post
mike
post 7.11.2008, 11:32:34
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A skąd przeglądarka ma wiedzieć, że to jest JavaScript? Wyślij odpowiednie nagłówki za pomocą header()
Go to the top of the page
+Quote Post
m.mix
post 7.11.2008, 12:10:11
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 21.11.2007

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


Niestety, dodanie nagłówka funkcją header("Content-type: text/javascript"); nic nie daje sad.gif FF po prostu go drugi raz nie odpala.. link ze źródłem skryptu się ładnie zmienia, bo podglądam FireBug'iem, ale nic się nie dzieje sad.gif

Ten post edytował m.mix 7.11.2008, 12:10:33
Go to the top of the page
+Quote Post
bregovic
post 7.11.2008, 18:27:26
Post #6





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Mix, zamknij oczy, wejdź na skrzynię, i popatrz na twój problem. Co, w moim rozwiązaniu, uniemożliwia generację twojego pliku przez php? Generacja to przecież nie twój problem. Twój problem to dynamiczne ściąganie i wykonywanie kodu w przeglądarce - a przynajmniej tak to prezentujesz. Aby rozwiązać ten problem poważnie, musisz modyfikować DOM (dodać element, ustawić właściwości etc) lub użyć XMLHTTPRequest, popularnie zwanego AJAX'em.

Poza tym, powinieneś pewnie ustawić odpowiednie header'y żeby się twój script nie chache'ował.
  1. <?php
  2. header("Cache-Control: no-cache, must-revalidate");
  3. header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
  4. ?>


Ten post edytował bregovic 7.11.2008, 18:33:12


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
m.mix
post 17.11.2008, 08:55:37
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 21.11.2007

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


Przepraszam wszystkich że dopiero teraz odpisuję, ale przez cały tydzień nie miałem dostępu do sieci.
jQuery.getScript() faktycznie pomogło, skrypt wykonuje się poprawnie, chociaż nie lubię używać narzędzi których sam do końca nie poznam (ale niestety nie bardzo mam czas na szukanie czegoś innego, więc na razie przynajmniej niech tak zostanie - jak się douczę to albo zamienie go na coś swojego albo przekonam się że nie ma się tu czego bać smile.gif).
Ale problem pozostaje - dziwi mnie dlaczego przeglądarka nie wykonuje tego podmienionego kodu - przecież w linii
Cytat

document.getElementById('skrypt_java').src='./skrypt.php?zmienna='+dane;

modyfikuję obiekt DOM - zmieniam jego źródło. Brakuje mi tutaj jakiejś komendy "execute" żeby teraz zmusić przeglądarkę aby ponownie przejrzała obiekty i zachowała się zgodnie z oczekiwaniami. Przecież na zmianę innych parametrów typu rozmiary czy kolory DIVów reaguje zawsze bez zwlekania :-/ No i najdziewniejsze że właśnie IE działa tutaj bez problemów sad.gif ale to pewnie dowodzi tylo że twórcy z Redmond w taki sam wypaczony sposób jak ja parzą na świat DOM smile.gif
Tak czy inaczej jeżeli ktoś ma problemy podobne do mnie to działający sposób przedstawiam poniżej:
  1. <script src="http://code.jquery.com/jquery-latest.js"></script>
  2. <script id=skrypt_pom>
  3. function GenerujLink() {
  4. var dane=document.getElementById('pole').value;
  5. $.getScript('./skrypt.php?zmienna='+dane);
  6. }
  7. </script>
  8. <input type=text id=pole>
  9. <input type=button value=Wcisnij onclick="GenerujLink()">
  10. </body>
  11. </html>


Ten post edytował m.mix 17.11.2008, 08:58:03
Go to the top of the page
+Quote Post
bregovic
post 18.11.2008, 06:23:28
Post #8





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Trochę grzebania mówi mi że powinieneś zerknąć na jQuery, nie skompresowane, linia 2660. Dla każdego skryptu który ściągasz, tworzą nowy element script, dodają go do head (z odpowiednim src) i usuwają gdy się załaduje.
Dla potomnych:
  1. <?php
  2. var head = document.getElementsByTagName("head")[0];
  3. var script = document.createElement("script");
  4. script.src = s.url;
  5. if (s.scriptCharset)
  6.    script.charset = s.scriptCharset;
  7.  
  8. // Handle Script loading
  9. if ( !jsonp ) {
  10.    var done = false;
  11.  
  12.    // Attach handlers for all browsers
  13.    script.onload = script.onreadystatechange = function(){
  14.        if ( !done && (!this.readyState ||
  15.                this.readyState == "loaded" || this.readyState == "complete") ) {
  16.            done = true;
  17.            success();
  18.            complete();
  19.            head.removeChild( script );
  20.        }
  21.    };
  22. }
  23.  
  24. head.appendChild(script);
  25. ?>


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
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: 13.06.2025 - 04:23