【问题标题】:How can I generate Dynamic Javascript?如何生成动态 Javascript?
【发布时间】:2009-02-10 07:02:57
【问题描述】:

我使用 YUI 呈现页面。并且根据用户我需要更改它的呈现方式。这种变化不是可以参数化的,它对每个用户来说都是剧烈的和不同的。

请告诉我如何动态生成 Javascript?

【问题讨论】:

    标签: php javascript yui


    【解决方案1】:

    我个人使用 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);
    

    【讨论】:

    • 我认为这是迄今为止解决给定问题的最佳解决方案。
    【解决方案2】:

    您可能可以创建两个单独的 Java 脚本文件,并包含所需的文件,具体取决于用户类型。

    伪代码

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 一种可能,但使用 eval 非常不安全。
      【解决方案4】:

      在这里稍加详细说明肯定会帮助您获得更具描述性和有用的答案。不过请记住,您可以轻松地使用在 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>
      

      【讨论】:

      • 我想说,检查用户类型应该是服务器端的事情,而不是使用客户端的 JavaScript。 (对于明显的漏洞)
      • 不过,这完全取决于他如何收集数据以及他是否精通服务器端语言;他可以轻松地使用他知道的语言(似乎是 JavaScript),并将用户的类型存储在 JS 变量中;授予,是的,在服务器端获取此变量将是有益的。
      • 在我看来这是一个非常低效和不安全的解决方案。还有我到底要怎么调用这个函数?
      猜你喜欢
      • 2018-11-13
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多