【问题标题】:create javascript code in a php file - SAFARI/CHROME doesn't work在 php 文件中创建 javascript 代码 - SAFARI/CHROME 不起作用
【发布时间】:2011-04-08 21:44:08
【问题描述】:

我创建了一个 .php 文件来写出这样的 js 代码:

<?
//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
//

然后我将上面的脚本包含在我的 index.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;
}

这是一个奇怪的问题,因为当我从 Crome/Safari 查看源代码时,我可以访问 js 文件,而且似乎没有错误!

我正在使用 Chrome 6.04 和 Safari 5,两者都适用于 mac。

【问题讨论】:

  • 请显示完成的渲染 HTML。 PHP 代码在这种情况下毫无意义。
  • 请不要使用短开放标签(&lt;?&lt;?= 而不是&lt;?php&lt;?php echo)不仅不符合标准,而且还引入了可移植性问题。
  • 不应该? &gt;结束标签造成解析错误吗?
  • 不介意 ? > 结束标签,那是我的错 :)
  • http://localhost:8888 看起来像 MAMP 提供的 localhost 服务器。我也用它。它的结构是这样的,因为您在使用指定端口(如 80 (HTTP))时需要输入管理员密码。

标签: php javascript google-chrome safari include


【解决方案1】:

可能是因为它期望文件扩展名是 my_js.js。如果是这种情况,请将您的 PHP 文件保存为 my_js.js,然后,假设您使用的是 Apache,请使用 Apache 指令:ForceType:

像这样:

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

祝你好运!

【讨论】:

  • 嗯,如果他提供正确的内容类型,这应该不是问题:在浏览器端期待某个扩展将是严重的错误行为!
  • 我同意,Pekka,但我记得早期版本的 Safari(特别是)有这个问题 - 也许仍然存在。例如,我经常在错误日志中看到 *.js 文件可以正常工作,但它们会发出警告,指出它们发送时带有错误的标头。这表明浏览器更喜欢扩展而不是内容类型。
【解决方案2】:

也许设置 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

");
?>

【讨论】:

    【解决方案3】:

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

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

    到这里

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

    注意:

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

    • text/javascript 在 HTML 4 和 5 中是允许的,并且与 application/javascript 不同,它具有跨浏览器支持

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2013-03-01
      • 1970-01-01
      • 2015-05-03
      • 2017-09-19
      • 2015-02-22
      相关资源
      最近更新 更多