【问题标题】:Dynamic Load CSS and JS files动态加载 CSS 和 JS 文件
【发布时间】:2014-05-30 03:32:19
【问题描述】:

大家好。

我有一些关于动态加载 CSS 和 JS 文件的问题。

我知道有很多这样的问题。但我关心的是:

我应该使用后端程序来加载 CSS 和 JS 吗?

例子:

if($page == "abc.com") {
    echo "<link href='abc.css' />";
else if($page == "def.com") {
    echo "<link href='def.css' />";
else {
    echo "<link href='ghi.css' />";
}

在特定页面中使用函数加载特定的 CSS,但它在

部分中声明。

Dynamically Add CSS and JS File - CodeIgniter

abc.com 内部

add_css(array('metro-admin.css', 'abc.css'));  
echo put_headers();

源代码如下所示。

【问题讨论】:

  • 是的,您可以使用后端在加载时根据 url 加载动态 css 和 js 文件。
  • 你可以这样做,但是你的 CSS 应该在 &lt;head&gt; 中加载以避免可能出现无样式内容闪烁的问题,并且你的 Javascript 应该在你的 &lt;body&gt; 末尾加载以避免页面加载期间的阻塞行为。您的问题中使用的方法忽略了这两个考虑因素。
  • 我不认为这是个好主意。您正在侵犯前端工作。维护的时候会很困惑
  • @MikeW 如果我在 的末尾加载那些 javascript 文件,恐怕有些 JS 函数可能无法正常工作。
  • @Canna 那我该怎么办?

标签: javascript css html codeigniter


【解决方案1】:

好的,我有一个解决方案,不是在 PHP 中显式声明 css,而是让 PHP 回显一个 &lt;script&gt; 标记,以便 PHP 在前端不会过多地侵入。

if($page == "abc.com") {
    echo "<script src='abc.js'></script>";
else if($page == "def.com") {
    echo "<script src='def.js'></script>";
else {
    echo "<script src='ghi.js'></script>";
}

好的,PHP 方面已经完成,现在我们将在各个脚本文件中破解脚本执行。

--== ABC.JS ===--

  var includeFiles = [ 
    'abc'
  ];

    for (var i = 0; i < includeFiles.length; i++) {
        $('head').append("<link rel='stylesheet' href=' +includeFiles[i]+ ".css'>");
    }

当然,您会为每个文件应用大约相同的代码,这可能会在 DRY 上崩溃,但由于此脚本仅在 PHP 明确回显时才会执行,因此不会重复,所以双方都有争论。

为什么要使用数组? 可移植性,如果您想在每个页面添加多个 CSS 文件,只需简单地将 CSS 文件名添加到数组中,循环就会相应地处理它。 p>

【讨论】:

  • -1。 CSS 不应该依赖于 javascript...
  • @moebius_eye 这是给出-1 的荒谬和模棱两可的理由,如果我想在 JS UserAgent 上检测到移动设备时应用 Mobile.CSS,它会附加基于如果找到移动设备?一种检测移动设备并附加覆盖 CSS 样式表的流行方法。
  • 那么你应该使用媒体查询。
  • @moebius_eye 好吧,根据你在 Anti-JS 上实现 CSS 的逻辑,grunt.js 不应该自动附加 CSS 文件吗?毕竟,这就是它的作用。
  • 我已经解释了为什么我认为这不是一个好的答案。 grunt.js 是否犯了同样的错误是无关紧要的。 OP 正在寻求使他找到的解决方案正常工作。阅读他的帖子,你就会明白我为什么不赞成这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
相关资源
最近更新 更多