0

我正在尝试为 Drupal 创建一个模块来清理每个页面上的一些内联 javascript。问题是,当我生成的文件包含在<script>标签中时,浏览器不会执行它们。这是我正在做的事情的基本概述:

模块特定代码(此代码在访问 mysite.com/jqsc/MD5_HASH_GOES_HERE 时执行,将 MD5 和作为第一个参数传递):

function jquery_settings_cache_get($hash) {
    header('content-type: application/x-javascript');

    if (file_exists(dirname(__FILE__) . "/cache/{$hash}")) {
        exit(file_get_contents(dirname(__FILE__) . "/cache/{$hash}"));
    }
    else {
        watchdog('jqsc', "missing file {$hash}", null, WATCHDOG_ERROR);
        exit("// JQuery Settings Cache error -- missing file {$hash}");
    }
}

当前 HASH.js 文件(这是从 HTML 模板中的脚本标记链接的):

alert('it works!');

当前的 HTML 输出(一些不相关的代码已被删除):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" dir="ltr">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <base href="http://example.com/sites/all/themes/mytheme/" />
  <script type="text/javascript" src="/sites/default/files/js/js_80a1e7d5d876d5176617603a4bbe39fe.js"></script> <!-- This file loads fine -->
  <script type="text/javascipt" src="/jqsc/deaa654d439f644fd473db0af4d993fe.js"></script> <!-- This file never loads -->
</head>
<body>
</body>
</html>

导航到 mysite.com/jqsc/HASH.js 会显示具有正确内容的文件(目前只是一个 alert() )。没有未关闭的注释、缺少函数声明或任何其他谷歌搜索“外部 javascript 未执行”的结果。Firebug 显示第二个文件永远不会执行(它永远不会在文件中设置的断点处停止)。实时 HTTP 标头显示已设置正确的内容类型(我尝试过 application/javascript、application/x-javascript 和 text/javascript 都具有相同的效果。将文件 #2 放在文件 #1 之前没有效果。更改传输编码无效。更改字符集无效。更改<script>标签以使用language=javascript或不使用type="text/javascript"或省略所有<script>标签属性,但src无效。

我正式卡住了。非常感谢您能想到的将我从这个洞中挖出来的任何事情。

4

1 回答 1

1

您可能在这里调用了错误的文件:

<script type="text/javascipt" src="/jqsc/deaa654d439f644fd473db0af4d993fe.js"></script>

再三考虑。因为完全失败而忽略这一点。

上面的“您的 javascript 中有错字”评论可能更接近事实;)

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

:D

于 2011-01-24T19:25:33.643 回答