2009-02-10 4 views
5

Rendo una pagina usando YUI. e a seconda dell'utente, ho bisogno di cambiare il modo in cui viene reso. Questo cambiamento non è qualcosa che può essere parametrizzato, è drastico e diverso per ogni utente.Come posso generare un Javascript dinamico?

Per favore dimmi come posso generare Javascript in modo dinamico?

risposta

9

io personalmente uso un file php per passare un oggetto JavaScript composto da alcuni sessione di base e le impostazioni interne, la missione non critica come passare informazioni alla ISN cliente' t eccessivamente sicuro, ma credo che potrebbe seguire gli stessi principi di quello che stai cercando.

Analogamente, lo uso per visualizzare determinati elementi una volta che il client ha effettuato l'accesso, sebbene tutte le autorizzazioni siano ancora eseguite sul lato server. Se il gestore di sessione dà il file PHP ok, emette un oggetto JavaScript usando una stringa heredoc PHP, altrimenti non emette nulla. È possibile utilizzare gli attributi di questo oggetto per il confronto, oppure è possibile produrre solo il codice JavaScript per il rendering di una determinata pagina, in base alle impostazioni nel file 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

Questo a mio parere è la migliore soluzione finora per il problema dato. –

2

Probabilmente è possibile creare due file di script Java separati e includere il file richiesto, a seconda del tipo di utente.

Pseudocodice

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

JavaScript ha una funzione eval, quindi penso (non ho provato) che si può generare JavaScript scrivendo in una variabile stringa (e quindi chiamando eval su quel variabile stringa).

+0

Una possibile, ma evals sono molto insicuro da usare. –

0

Un po 'di elaborazione qui sarebbe sicuramente di aiuto per ottenere una risposta più descrittiva e utile. Tenendo presente, però, potresti facilmente utilizzare le funzioni dichiarate all'interno di un'istruzione if per fornire esperienze distinte e diversificate per utenti diversi.

Un molto esempio di base:

<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

Direi che il controllo per il tipo di utente dovrebbe essere una cosa lato server invece di usare un javascript sul lato client. (Per ovvie vulnerabilità) –

+0

Dipende interamente da come sta raccogliendo i dati e dal fatto che sia competente o meno in un linguaggio lato server, comunque; potrebbe facilmente usare la lingua che conosce (JavaScript, sembra) e memorizzare il tipo di utente in una variabile JS; garantito, sì, sarebbe vantaggioso ottenere questa variabile sul lato server. –

+0

Questa è una soluzione molto inefficiente e insicura a mio parere. Inoltre, in che modo esattamente effettuerò una chiamata a questa funzione? –