2009-02-10 11 views
5

Renderuję stronę za pomocą YUI. i w zależności od użytkownika muszę zmienić sposób renderowania. Ta zmiana nie jest parametryzowana, jest drastyczna i różna dla każdego użytkownika.Jak mogę wygenerować Dynamic JavaScript?

Proszę mi powiedzieć, jak mogę generować JavaScript dynamicznie?

Odpowiedz

9

osobiście użyć pliku php aby przekazać obiekt JavaScript składa się z kilku podstawowych sesji i ustawień wewnętrznych, misji nic krytycznego jako przekazywanie informacji do ISN klienta” t zbyt bezpieczne, ale uważam, że może być zgodny z tymi samymi zasadami, których szukasz.

Podobnie, używam tego do wyświetlania pewnych elementów, gdy klient jest zalogowany, chociaż wszystkie autoryzacje są nadal wykonywane po stronie serwera. Jeśli mój program obsługi sesji daje plik PHP w porządku, wyprowadza obiekt JavaScript za pomocą łańcucha heredoc PHP, w przeciwnym razie niczego nie wyprowadza. Możesz użyć atrybutów tego obiektu do porównania lub możesz wypisać tylko JavaScript, aby dowiedzieć się, jak powinna wyglądać określona strona, na podstawie ustawień w twoim pliku php.

HTML:

<script src="common/javascript/php_feeder.php" type="text/javascript"></script> 

PHP:

//my session handler authorisation check has been removed 
//although you could place your own up here. 

//assuming session was authorised 
//set content type header 
header("content-type: application/x-javascript"); 

$js_object = <<<EOT 
var my_object = { 
    my_attr: '{$my_attr}', 
    my_attr2: '{$my_arrt2}', 
    etc: '{$etc}' 
} 
EOT; 

print($js_object); 
+0

Jest to moim zdaniem najlepsze rozwiązanie do tej pory dla danego problemu. –

2

Prawdopodobnie można utworzyć dwa oddzielne pliki skryptów Java i dołączyć wymagany plik, w zależności od typu użytkownika.

Pseudokod

If user_type is One 
    <Script src='one.js' type='javascript'></script> 
else 
    <Script src='other.js' type='javascript'></script> 
End If 
0

JavaScript posiada funkcję eval, więc myślę, że (I nie próbował go), które można wygenerować JavaScript pisząc ją na sznurku zmiennej (i wtedy wywołanie eval na które zmienna łańcuchowa).

+0

Możliwym jeden, ale evals są bardzo niebezpieczne w użyciu. –

0

Trochę wyjaśnienia tutaj z pewnością pomoże ci uzyskać bardziej opisową i pomocną odpowiedź. Mając to na uwadze, możesz z łatwością użyć funkcji zadeklarowanych w instrukcji if, aby zapewnić różne doświadczenia dla różnych użytkowników.

bardzo prosty przykład:

<script> 
function do_something(userType) 
{ 
if (userType == 'A') 
{ 
// everything you need to do for userType A 
} 
if (userType == 'B') 
{ 
// everything you need to do for userType B 
} 
} 
</script> 
+0

Powiedziałbym, że sprawdzanie typu użytkownika powinno być sprawą po stronie serwera, zamiast używania javascript po stronie klienta. (Dla oczywistych słabych punktów) –

+0

Zależy całkowicie od tego, w jaki sposób zbiera dane i czy jest kompetentny w języku po stronie serwera; mógłby z łatwością korzystać z języka, który zna (JavaScript, wydaje się) i zapisywać typ użytkownika w zmiennej JS; przyznane, tak, byłoby korzystne uzyskać tę zmienną stronę serwera. –

+0

To jest bardzo nieefektywne i niepewne rozwiązanie, moim zdaniem. Również, w jaki sposób mam wykonać połączenie z tą funkcją? –