2010-09-06 76 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的,具有跨瀏覽器支持