Php 如何生成动态Javascript?
我使用YUI呈现页面。根据用户的不同,我需要改变它的渲染方式。这种变化不是可以参数化的,它是剧烈的,对每个用户都是不同的Php 如何生成动态Javascript?,php,javascript,yui,Php,Javascript,Yui,我使用YUI呈现页面。根据用户的不同,我需要改变它的渲染方式。这种变化不是可以参数化的,它是剧烈的,对每个用户都是不同的 请告诉我如何动态生成Javascript?您可能可以创建两个单独的Java脚本文件,并根据用户类型包括所需的文件 伪代码 If user_type is One <Script src='one.js' type='javascript'></script> else <Script src='other.js' type='ja
请告诉我如何动态生成Javascript?您可能可以创建两个单独的Java脚本文件,并根据用户类型包括所需的文件 伪代码
If user_type is One
<Script src='one.js' type='javascript'></script>
else
<Script src='other.js' type='javascript'></script>
End If
如果用户类型为1
其他的
如果结束
JavaScript有一个eval
函数,所以我认为(我还没有尝试过)可以通过将JavaScript写入字符串变量(然后对该字符串变量调用eval
)来生成JavaScript。这里稍微细化一下肯定会有助于获得更详细、更有用的答案。不过,请记住,您可以轻松地使用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>
函数do_something(userType)
{
如果(userType='A')
{
//需要为userType A执行的所有操作
}
如果(userType='B')
{
//用户类型B需要执行的所有操作
}
}
我个人使用一个PHP文件来传递一个JavaScript对象,该对象由一些基本会话和内部设置组成,没有什么比向客户端传递信息更重要的任务了,这并不过分安全,但我相信它可能遵循与您所寻找的相同的原则
类似地,我使用它在客户端登录后显示某些元素,尽管所有授权仍然在服务器端完成。如果我的会话处理程序给PHP文件ok,它将使用PHPEredoc字符串输出一个JavaScript对象,否则,它不会输出任何内容。您可以使用此对象的属性进行比较,或者根据PHP文件中的设置,仅输出特定页面应如何呈现的JavaScript
HTML:
PHP:
//我的会话处理程序授权检查已删除
//虽然你可以把自己的放在这里。
//假设会议得到授权
//设置内容类型标题
标题(“内容类型:应用程序/x-javascript”);
$js_object=我想说,检查用户类型应该是服务器端的事情,而不是使用客户端javascript。(对于明显的漏洞)完全取决于他如何收集数据,以及他是否能够胜任服务器端语言;他可以很容易地使用他所知道的语言(似乎是JavaScript),并将用户的类型存储在JS变量中;当然,是的,获得这个可变的服务器端将是有益的。在我看来,这是一个非常低效和不安全的解决方案。还有,我到底要如何调用这个函数?一个可能的函数,但是evals使用起来非常不安全。我认为这是到目前为止针对给定问题的最佳解决方案。
<script src="common/javascript/php_feeder.php" type="text/javascript"></script>
//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);