我该如何生成动态Javascript?

9
我使用YUI渲染页面,根据用户的不同,需要改变页面的渲染方式。这种改变不是可以通过参数化实现的,对于每个用户都是不同的。请告诉我如何动态生成Javascript代码?
4个回答

13

我个人使用一个PHP文件来传递一个由一些基本会话和内部设置组成的JavaScript对象,因为将信息传递给客户端并不是非常安全的,所以没有传递关键性信息,但我认为这可能遵循你正在寻找的相同原则。

同样地,我使用它来在客户端登录后显示某些元素,尽管所有授权仍然在服务器端完成。如果我的会话处理程序向PHP文件发出确认,它将使用PHP的heredoc字符串输出一个JavaScript对象,否则,它将不输出任何内容。您可以使用此对象的属性进行比较,或者您可以仅根据PHP文件中的设置输出特定页面应如何呈现的JavaScript。

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);

在我看来,这是目前为止针对所提出问题的最佳解决方案。 - Eastern Monk

2
您可以创建两个不同的JavaScript文件,并根据用户类型包含所需的文件。
伪代码
If user_type is One
    <Script src='one.js' type='javascript'></script>
else
    <Script src='other.js' type='javascript'></script>
End If

0

JavaScript有一个eval函数,因此我认为(我没有尝试过),您可以将JavaScript写入字符串变量中(然后在该字符串变量上调用eval)以生成JavaScript。


可能有一种方法,但是使用eval非常不安全。 - Eastern Monk

0
在这里稍微详细解释一下肯定会有助于获得更具描述性和有用的答案。尽管如此,您可以轻松地使用在if语句中声明的函数为不同的用户提供明显不同的体验。
一个非常基本的例子:
<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>

1
我认为,检查用户类型应该是在服务器端进行而不是使用客户端JavaScript。(因为明显的漏洞) - M.N
完全取决于他如何收集数据以及他是否精通服务器端语言;不过,他可以轻松地使用他熟悉的语言(似乎是JavaScript),并将用户的类型存储在一个JS变量中;当然,从服务器端获取这个变量会更有益处。 - Hexagon Theory
在我看来,这是一个非常低效和不安全的解决方案。另外,我应该如何调用这个函数? - Eastern Monk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接