Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ajax i wczytywanie skryptów JS
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
SHiP
Mam lekki problem. Napisałem sobie silnik który wczytuje pliki w określonej kolejności i ładuje do strony... niestety gdy wczytany text zawiera kod JavaScript i wrzuce to do mojego diva to nie jest on wykonywany ;] co zrobić aby JavaScript nie wiem... przeszukał text odnalażł skrypt i go wykonał ;] Czy może umiescić go w oddzielnym pliku *.js i loadowac za kazdym razem wraz ... sam już nie wiem w każdym bądz razie skrypty typu...

Kod
<script language="javascript">
<!--
var text = '<body onload="alert(\'onload\')">Skrypt: <sc'+'ript language="javascript"><!--alert("OK dziala");//--></sc'+'ript></body>';

function aktywuj()
{
document.getElementById('main').innerHTML=text;
}
//-->
</script>
<a href="javascript:aktywuj()">Aktywuj</a>
<div id="main"></div>

...nie działają dry.gif
mike
1. Może funkcja eval() Ci sie przyda?
2. Jeśli za pomocą AJAXa ladujesz dynamicznie stroną, która zawira JavaScript to nie masz szans go wykonać, bo w rzeczywistości kod ten nie ma styczności z przeglądarką, więc nie ma kto go wykonać.
SHiP
OK dzięki ;] tak myślałem że jednak nie bedzie innego wyjścia jak przerobić skrypt...
anopak
Cytat(mike_mech @ 2005-12-15 18:33:35)
1. Może funkcja eval() Ci sie przyda?
2. Jeśli za pomocą AJAXa ladujesz dynamicznie stroną, która zawira JavaScript to nie masz szans go wykonać, bo w rzeczywistości kod ten nie ma styczności z przeglądarką, więc nie ma kto go wykonać.

ad 1. faktycznie eval, a do tego RegExp
ad 2. co do tego to się nie zgodzę, bardzo często wykorzystuję to, że dopiero po załadowaniu AJAX'em wykonuję jakąś funkcję, którą właśnie przesłałem AJAX'em... Jedyny problem to jest to, że nie da się dość prosto dynamicznie załadować script z użyciem src="...", w takim wypadku trzeba to załadować AJAX'em i użyć eval....
xamil
Witam, podepne się.

Stworzyłem sobie skrypt który wczytuje mi odpowiednie js i wykonuje je przy pomocy funkcji eval. Niestety mam problem... W przesyłanym kodzie js przesyłam również całe funkcje i kiedy chce z niej skorzystać na stronie dostaje informacje, że taka funkcja nie istnieje:(

Okazało się, że po wykonaniu eval() przesłane funkcje są dostępne tylko w obrębie funkcji w której wykonałem eval. Niestety nie są one dostępne globalnie. W sumie jest to jak najbardziej logiczne;) no ale nie taki efekt chcę uzyskać;)

Więc teraz pytanie. Co zrobić aby po wykonaniu eval na kodzie zawierającym funkcje te funkcje były dostępne globalnie?
SHiP
Spróbuj deklarowac fukncje jak zmienne tj.

Kod
nazwa_funkcji() = function(parametry)
{
    // reszta
}
xamil
Z lekką modyikacją:
Kod
nazwa_funkcji = function(parametry)
{
    // reszta
}
I chyba śmiga:] Dziękuje pięknie:] Czy takie rozwiązanie może gdzieś albo jakiejś sytuacji nie działać? Moze to nieść ze sobą jakieś problemy? Czy po prostu wszystko winno śmigać jakbym zwyczajnie deklarował funkcje? winksmiley.jpg
gekon
A ja dorzucę jeszcze to: http://24ways.org/advent/have-your-dom-and-script-it-too
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.