Я пытаюсь создать модуль для 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, вы получите файл с правильным содержимым (только предупреждение () на данный момент). Там нет комментариев, которые будут закрыты, пропущены объявления функций, или что-то еще, что Google поиска «внешний javascript не выполняется». Firebug показывает, что 2-й файл никогда не выполняется (он никогда не останавливается на точке останова, установленной в файле). Активные заголовки HTTP показывают, что был установлен правильный тип содержимого (я пробовал application / javascript, application / x-javascript и text / javascript - все с одинаковым эффектом. Помещение файла № 2 перед файлом # 1 не имеет никакого эффекта. Изменение транспортной кодировки не имеет никакого эффекта. Изменение кодировки не имеет никакого эффекта. Изменение тега <script>
для использования language=javascript
с или без type="text/javascript"
или пропуск всех свойств тега <script>
, за исключением src
, не имеет никакого эффекта.
Я официально застрял. Все, что вы можете придумать, чтобы вытащить меня из этой дыры, очень ценится.