Скрипт не загружается из-за ошибки MIME типа javascript

5 мая 2019 г., 18:47:32
Просмотры: 27.2K
Голосов: 2

Я пытаюсь подключить плагин jQuery Masonry на сайте. Я обновил файлы шаблона, чтобы добавить нужные классы для работы плагина. Затем я подключил скрипты следующим образом:

function masonry_scripts() {
    wp_enqueue_script('masonry');
    wp_enqueue_script( 'masonry-script', get_template_directory_uri() . '/assets/js/masonry-script.js', array(), false, true );
}
add_action( 'wp_enqueue_scripts', 'masonry_scripts' );

Скрипт masonry загружается правильно, но файл masonry-script.js не загружается. В консоли я получаю следующую ошибку:

Скрипт из ".../assets/js/masonry-script.js?ver=5.1.1" был загружен, хотя его MIME тип ("text/html") не является допустимым MIME типом JavaScript.[Подробнее] Загрузка не удалась для источника "http://thewallmarket.local/wp-content/themes/storefront/assets/js/masonry-script.js?ver=5.1.1".

К сожалению, я не могу предоставить ссылку на сайт, так как он разрабатывается локально.

Что вызывает эту проблему? Как я могу это решить?

0
Все ответы на вопрос 1
2

Эта ошибка означает, что ресурс (в данном случае JS-файл), который вы загружаете, ожидается как JavaScript, но вместо этого является HTML. Это может быть из-за неправильного пути или потому что локальный файл не является JS.

Скорее всего, указанный вами скрипт по пути /assets/js/masonry-script.js не является JS-файлом или не может быть загружен как таковой. Похоже, что вы получаете ошибку "Файл не найден" (с перенаправлением на 404 страницу).

Попробуйте добавить этот код между двумя строками wp_enqueue_script():

printf(get_template_directory_uri() . '/assets/js/masonry-script.js');

Это выведет полный путь к файлу, который вы пытаетесь загрузить. Проверьте, можете ли вы открыть этот URL в отдельной вкладке браузера. Возможно, вам нужно будет изменить URL следующим образом:

wp_enqueue_script('masonry-script', untrailingslashit(get_template_directory_uri() . '/assets/js/masonry-script.js', [], false, true);

Также проверьте содержимое локального файла, чтобы убедиться, что он действительно содержит JavaScript. Если нет, возможно, вам потребуется загрузить корректную версию.

Если требования вашего проекта позволяют и CDN доступен, вы можете рассмотреть возможность использования jQuery Masonry через CDN.

Обновление: родительская тема vs. дочерняя тема

Как указано в документации WP для get_template_directory_uri(), если вам нужен URL дочерней темы вместо родительской, используйте get_stylesheet_directory_uri().

5 мая 2019 г. 20:52:32
Комментарии

Спасибо за ваш ответ. Файл является js-файлом, и путь к нему указан правильно. Но используя ваш трюк, я понял, что выводимый путь ведет к родительской теме, а не к дочерней. А мне, конечно же, нужен доступ к дочерней теме.

Полагаю, проблема в функции get_template_uri(). Не думаю, что использование абсолютного пути к файлу будет правильным решением, но я не знаю, что делать в этой ситуации. Может быть, вы знаете, как это исправить?

user3615604 user3615604
5 мая 2019 г. 22:52:33

Обновил ответ: используйте get_stylesheet_directory_uri().

Stephan Samuel Stephan Samuel
6 мая 2019 г. 18:56:43