Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
清除指向PHP生成的JavaScript和CSS的链接_Php_Javascript_Css_Templates_Scripting - Fatal编程技术网

清除指向PHP生成的JavaScript和CSS的链接

清除指向PHP生成的JavaScript和CSS的链接,php,javascript,css,templates,scripting,Php,Javascript,Css,Templates,Scripting,背景:使用PHP或任何类似工具生成HTML内容时,可以将指向JavaScript和CSS的链接封装在标记中,而不必将CSS和JavaScript与其余内容“串联”在一起。您所要做的就是创建指向该文件的链接 例如: {script type=“text/javascript”src=“./js/fooscript.js”}{/script} 问题:但是,如果您的PHP需要动态生成部分或全部JavaScript代码,则上述方法不起作用。有没有一种方法可以像上面那样有一个干净的“一行”链接,但仍然使用

背景:使用PHP或任何类似工具生成HTML内容时,可以将指向JavaScript和CSS的链接封装在标记中,而不必将CSS和JavaScript与其余内容“串联”在一起。您所要做的就是创建指向该文件的链接

例如: {script type=“text/javascript”src=“./js/fooscript.js”}{/script}

问题:但是,如果您的PHP需要动态生成部分或全部JavaScript代码,则上述方法不起作用。有没有一种方法可以像上面那样有一个干净的“一行”链接,但仍然使用动态生成的JavaScript


显然,一种方法是让PHP自动生成JavaScript并将其写入文件;然而,由于各种原因,这种方法是不可取的。我想知道是否还有一个我还没有想到的替代技巧。

.htaccess
文件放在
/js/
文件夹中,并将
.js
扩展添加到PHP中,如下所示:

AddHandler application/x-httpd-php .js
换句话说,让PHP将所有
.js
文件解析为PHP文件。因此,您的脚本实际上是服务器端输出JavaScript的PHP文件。显然,对样式表也要这样做,只使用
.css
扩展名


注意:我从未尝试在单独的
.htaccess
文件中执行此操作。如果不起作用,只需将其放入全局Apache配置中。

您可以在JavaScript和CSS调用中使用.php文件。它并不漂亮,任何查看源代码的人都知道它是一个脚本,但它省去了服务器上配置的麻烦。另外,如果您正在制作动态JavaScript,我建议在末尾添加一个时间戳,这样浏览器就不会缓存它

例如

<script src="myjavascript.php?a=20090611-021213"></script>


根据我的经验,很少需要(也很少应该)动态生成整个脚本。例如,在javascript中,您可能需要动态地将某些数据(如用户信息或设置)获取到javascript中,但脚本的其余部分(类/函数/DOM操作)在所有用户中都是静态的

通常在这种情况下,您只需要将动态内容“内联”,从PHP动态输出,然后将js(不需要动态生成的95%)作为外部脚本包含在内。最明显的原因是缓存js/css

考虑一下reddit.com是如何通过查看将用户数据转换成javascript的源代码来实现的

var reddit = {
    /* is the user logged in */ logged: 'username',
    /* the subreddit's name (for posts) */ post_site: "",
    /* are we in an iframe */ cnameframe: false,
    /* this page's referer" */ referer: "",
    /* the user's voting hash */ modhash: 'lzbcszj9nl521385b7e075e9750ee4339547befc6a47fa01e6',
    /* current domain */ cur_domain: "reddit.com", ...
}

其余的js可以在外部文件中找到。

您可以使用mod_rewrite将某些php文件视为CSS/js


e、 g./css/screen-style.css指向css.php?friendly_id=screen style

我想你指的是AddHandler,而不是AddType。AddType设置传出的mimetype头。哦,你说得对,谢谢你纠正我。我已经有一段时间没有这样做了。:)“尽管这使得PHP能够解析服务器上的所有JavaScript/CSS文件”,但不必这样做。只需将它粘贴在一个或标签中,用于您提供php js文件的目录。我重新格式化了代码,以便不必滚动阅读它。+1您真的应该允许用户缓存尽可能多的好答案。从设计角度来看,这允许良好的MVC分离和封装+1如果您确实使用这种方法,请确保添加适当的“内容类型”标题。