评估php生成的javascript“内联”?

时间:2010-06-16 00:51:14

标签: php javascript include inline minify

如果您查看此页面的来源http://kingston.talking-newspapers.co.uk/,您会在顶部附近看到大量的内联JavaScript。

我真的不希望所有这些额外的东西在我的页面源代码中浮动,我更愿意把它放到脚本标签中,然后我可以缩小它并且各种各样。

如果我把它称为php文件,这应该在理论上工作,我只是用php结束js文件扩展名,而在标题中我放了以下内容:

header("Content-type:application/x-javascript");

但是...用于在javascript中生成播放列表的很多php变量都是在主index.php文件的开头设置的,并且在调用这个php生成的js播放列表文件时,它似乎完全单独评估它,所以它充满了错误。

我能想到的唯一方法就是让页面写一个文件,然后立即读取它。另一个是,播放列表可能经常动态地改变,所以我想我需要缩小不缓存它?

2 个答案:

答案 0 :(得分:1)

我按照本教程制定了解决方案,该教程将生成内联脚本重定向到文件,然后立即读取该文件。

http://my.opera.com/zomg/blog/2007/10/03/how-to-easily-redirect-php-output-to-a-file

所以现在我的页面看起来像是:

<?php
require("./filewriter.php");
$obfw = new OB_FileWriter('jplay_gen_playlist.js');
$obfw->start(); 
require($includesdir . "jplayerscript.php");
$obfw->end(); 
?>

<script type="text/javascript" src="jplay_gen_playlist.js"></script>

瞧,瞧!所有外部,可以缩小,缓存等。

答案 1 :(得分:0)

你可以用两种方式做到这一点。首先将内联变量设置,然后包含脚本:

<script type="text/javascript">
  var myPlayList = [
    {
       name: "Introduction and guidance on usage",
       mp3:"http://www.talking-newspapers.co.uk/find/soundfiles/TnHomePageIntro.mp3",
       ogg:"http://www.talking-newspapers.co.uk/find/soundfiles/kingstonkt9.ogg"
    }
    ...
 </script>
 <script type="text/javascript" src="myinclude.js"></script>

另一种方法是让你的.js文件包含一个简单的函数库,你可以在页面顶部包含这些函数,然后从某些内联javascript 调用

<script type="text/javascript" src="myinclude.js"></script>

....

<script type="text/javascript">
$(function() {
    var myPlayList = [ ... ];
    startPlaylist(myPlayList);
});
</script>

我个人会选择第二种方法。您不需要动态生成任何脚本(据我所知,除了播放列表外,它们都可以进行硬编码,对吗?)您需要传递给脚本的任何其他内容仍然可以传入无论如何,通过startPlaylist()方法调用。