2010-09-06 68 views
0

我已经创建了一个写出来的JS这样的代码PHP文件:创建一个PHP文件,JavaScript代码 - Safari /铬不起作用

<? 
//my_js.php 
// javascript header 
header('Content-type: text/javascript'); 
// Date in the past 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
// always modified 
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
// HTTP/1.1 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0', false); 
?> 
// 
// js code here 
// 

然后我包括上面我的索引脚本PHP文件是这样的:

<script type="text/javascript" src="my_js.php?id=<? echo $id ?>"> 
</script> 

这在Firefox完美,但Safari和Chrome不包括my_js.php文件在所有!

我做错了什么?

**编辑:

这是在index.php文件呈现的HTML:

<script type="text/javascript" src="my_js.php?id=new"></script> 

,这是my_js.php代码: (这是一个非常大的文件,所以我只写了前几行)

var g = { sitepath: "myNullUrl" } 

function getBrowserWidth(){ 
if (window.innerWidth){ 
    return window.innerWidth;} 
else if (document.documentElement && document.documentElement.clientWidth != 0){ 
    return document.documentElement.clientWidth; } 
else if (document.body){return document.body.clientWidth;}  
    return 0; 
} 

这是一个奇怪的问题,“而我从克罗姆/ Safari浏览器查看源代码,我可以访问js文件COS和它似乎没有错误!

我使用的是Chrome 6.04和Safari 5,均适用于Mac。

+1

请出示成品,呈现HTML。在这种情况下,PHP代码没有意义。 – 2010-09-06 19:24:29

+0

请不要使用短打开的标签('<?'和'<?='而不是'<?php'和'<?php echo')它不仅符合标准,而且还引入了可移植性问题。 – NullUserException 2010-09-06 19:25:57

+1

不应该''? >'结束标记创建一个解析错误? – 2010-09-06 19:27:14

回答

0

也许设置Content-Disposition:inline;头?

 <?php 
    if(strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")==false) { 
     header("Content-type: text/javascript"); 
     header("Content-Disposition: inline; filename=\"download.js\""); 
     header("Content-Length: ".filesize("my-file.js")); 
    } else { 
     header("Content-type: application/force-download"); 
     header("Content-Disposition: attachment; filename=\"download.js\""); 
     header("Content-Length: ".filesize("my-file.js")); 
    } 
    header("Expires: Fri, 01 Jan 2010 05:00:00 GMT"); 
    if(strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")==false) { 
     header("Cache-Control: no-cache"); 
     header("Pragma: no-cache"); 
    } 
    include("my-file.js 

"); 
?> 
0

可能是因为它期待的文件扩展名是my_js。 js。如果是这样的话,你的PHP文件保存为my_js.js,那么,假设你使用Apache,使用Apache指令:ForceType指令:

像这样:

<Location /your/path/my_js.js> 
     ForceType application/x-httpd-php 
</Location> 

祝你好运!

+1

嗯,如果他提供了正确的内容类型,这应该不会是一个问题:在浏览器的最后期望一定的扩展会导致严重的错误行为! – 2010-09-06 19:26:41

+0

我同意Pekka,但我有一些回忆,Safari的加密版本(特别是)有这个问题 - 也许还有。例如,我经常在错误日志中看到* .js文件可以正常工作,但他们会发出警告,指出它们是由错误的标题发送的。这表明浏览器更喜欢通过内容类型的扩展。 – mkoistinen 2010-09-06 19:33:58

0

它应该工作。或者你可以改变这一点:

header('Content-type: text/javascript'); 

这个

header('Content-type: application/javascript'); 

注:

  • 应用程序/ JavaScript的:JavaScript的;在RFC 4329中定义,但在IE 8不接受或更早

  • 文/ JavaScript的是允许在HTML 4和5,不同的应用程序/ JavaScript的,具有跨浏览器支持