从非公共目录加载 css 或 javascript
Posted
技术标签:
【中文标题】从非公共目录加载 css 或 javascript【英文标题】:loading css or javascript from non-public directory 【发布时间】:2011-02-24 22:52:47 【问题描述】:有没有办法从公共网络目录之外加载 css 和/或 javascript 文件?
例如,在我的托管服务中,我有 /public_html,但不希望这些文件存在于公共目录中,并希望它们在同级目录 /system(我正在使用 codeigniter)中的公共目录之外的目录中/system/application/view/
【问题讨论】:
这没有任何意义。你想提供这些文件的内容,所以把它们放在 public_html 文件夹中.. 我知道我想为他们提供服务,我的意思是有一种方法可以从公共以外的某些来源处理这些文件。在 /public 中拥有一个以 css/js 形式存在的视图层,而在其他目录中拥有公共之外的视图模板,这很烦人。因此,为了维护所有视图组件,我希望这些文件都存在于同一目录中,而不是全部存在于 public_html 中。然而,这个问题确实有道理。 【参考方案1】:最终,Javascript 和样式表在客户端进行处理。因此,没有任何解决方案可以真正向公众隐藏您的 javascript 或 CSS。
一种可能的解决方案是通过 php 使用类似 file_get_contents() 的方式加载所需的 CSS/Javascript 文件,然后使用内联样式/脚本将其直接输出到页面。
但这并不能真正解决您对公众隐藏代码/样式的问题。它可以让您选择通过某种打包程序或混淆器过滤所有代码和样式,尽管您没有理由不能对静态文件执行此操作(而且处理费用要少得多)
【讨论】:
【参考方案2】:是的——在某种程度上——并且缩小 [http://code.google.com/p/minify/]是一种方法。
查看配置文件的第 39 行 [http://code.google.com/p/minify/source/browse/trunk/min/config.php].在这里,您将看到您的缩小缓存位于 Web 根目录之外的位置。现在,我不知道源 JS 和 CSS 是否可以与缓存位于同一目录中。
【讨论】:
这正是我正在寻找的。我在输入我的问题时脑子里放了个屁,但你搞定了。谢谢!【参考方案3】:没有面向公众的代理。
您需要file_get_contents()
或include
他们,然后将他们提供给您的页面。
您不能只做../../system
并超越 DOCROOT。
它们需要被浏览器处理,因此它们需要可访问。
如果您想阻止人们以易于阅读的方式查看您的来源,请查看CSS minify 和JS packer。这些当然只是混淆了代码。任何确定的人都可以阅读您的 JavaScript 并查看它的作用。
您为什么不希望人们阅读您的 CSS 或 JavaScript?
【讨论】:
从来没有说过我不想让他们阅读文件,这不是问题。我只想在同一目录中维护所有视图和公共文件,而不是在 codeigniter 的文件结构中拆分视图模板和 javascript/css。【参考方案4】:我知道你的意思 twmulloy,在不同的地方有“查看”相关信息似乎不一致。但是,请考虑 JS 和 CSS 文件是支持视图的资源,而不是视图本身的一部分。
也就是说,您可以通过多种方式实现您想要的。一种可能是编写一个控制器,它接受对您的 JS/CSS 资产的请求,并从相关位置(视图文件、数据库,实际上是任何地方)输出标题和数据。但是,与仅接受在根级别 public_html 的子文件夹中弹出文件的“不整洁”相比,这是低效的。我和上面的许多评论者一样,认为这是速度和适当性的最佳解决方案;只是有一个与“系统”目录处于同一级别的“资产”目录,其中包含图像、css、js 等。您可以使用别名或虚拟文件夹来让您感觉更好...
但是,还有第三种方法。有一些库可以做一些你想要的事情,还有 Minify (来自接受的答案)和压缩的额外好处,或者你喜欢的任何东西。我知道的两个库称为 AssetLibPro 和 Carabiner,它们允许您指定资产路径(根据需要),然后加载 JS 和 CSS 文件(带有组,例如屏幕,如果需要,可以打印)。然后他们将所有相关的 CSS/JS 等作为一个文件提供;压缩、缩小、缓存……随你所需。
登山扣:http://codeigniter.com/wiki/Carabiner/ AssetLibPro:http://codeigniter.com/forums/viewthread/78931/【讨论】:
以上是关于从非公共目录加载 css 或 javascript的主要内容,如果未能解决你的问题,请参考以下文章
使用 JavaScript 从本地 HTML5 Web 应用程序加载 JSON