Chrome відмовився виконувати цей файл JavaScript


32

У голові моєї HTML-сторінки:

<script src="https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js"></script>

Коли я завантажую сторінку у своєму браузері (Google Chrome v 27.0.1453.116) і включаю інструменти для розробників, він говорить:

Відмовилися виконувати скрипт із " https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js ", оскільки його тип MIME ("текст / звичайна") не виконується, і включена сувора перевірка типу MIME.

Дійсно, сценарій не запускається. Чому Chrome вважає, що це звичайний текстовий файл? Він чітко має .jsрозширення файлу.

Оскільки я використовую HTML5, typeатрибут я пропустив , тому вважав, що це може спричинити проблему. Тому я додав type="text/javascript"до <script>тегу і отримав такий же результат. Я навіть спробував type="application/javascript"і досі отримав ту саму помилку.

Тоді я спробував змінити його type="text/plain"просто з цікавості. Браузер не повернув помилку, але, звичайно, і JavaScript не запустився.

Нарешті я подумав, що періоди у назві файлу можуть відкинути браузер. Отже, у своєму HTML-коді я змінив усі періоди на символ виділення URL-адреси %2E:

<script src="https://raw.github.com/cloudhead/less%2Ejs/master/dist/less-1%2E3%2E3.js"></script>

Це досі не вийшло. Єдине, що справді працює (тобто браузер не видає помилок і JS успішно працює) - це якщо я завантажую файл, завантажую його в локальний каталог, а потім змінюю srcзначення на локальний файл. Я б краще не робив цього, оскільки намагаюся заощадити місце на власному веб-сайті.

Як змусити Chrome визнати, що пов'язаний файл - це фактично JavaScript?

Відповіді:


16

Проблема, яку ви маєте, не має свого контролю, оскільки це налаштування хостингу в Github на шляху, про який ви згадали, тип розширення - це не лише фактор, що стосується виконання файлів, оскільки веб-хостинг може перевищувати, як браузер надає файл.

Ви можете мати .zip-рендерінг у вигляді .html-файлу, якщо хост був налаштований так, ви можете перевірити це самостійно, використовуючи firebug та переглянувши відповідь заголовка на те, що проситься .... так що якщо ви запитаєте файл JS, але відповідь заголовка повертає інше очікуване значення, тоді браузери поважатимуть відповідь заголовка, а не те, що вимагається ...

Повертається github-хостинг на сирому субдомені Content-Type text/plain; charset=utf-8 як тип MIME, що означає, що він не буде працювати як JS, а як сировина, нижче - приклад того, що вам потрібен сервер для повернення файлу, і далі вниз є код, який повертається github.

Сервер, який підтримує тип JS MIME, буде виглядати приблизно так:

Accept-Ranges   bytes
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  31097
Content-Type    application/javascript
Vary    Accept-Encoding
Request Headersview source
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

І саме це https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.jsзаголовок відповідає як (RAW VIEW).

Accept-Ranges   bytes
Connection  Keep-Alive
Content-Disposition inline
Content-Encoding    gzip
Content-Length  41354
Content-Transfer-Encoding   binary
Content-Type    text/plain; charset=utf-8

Е, що? То в чому виправлення?
пабрамс

2
@pabrams, що використовує належний хост у вашому контролі, - це виправлення або використання rawgit
Simon Hayter

25

Грудень 2018 правка

Тепер RawGit заходить із-за шкідливого використання, тому вони рекомендують замість цього скористатися однією з таких служб:


Оригінальна публікація

Rawgithub.com дозволяє користувачам приймати "Raw" версії Git і перетворювати його на URL, який можна використовувати в <script>тегах. Це досить простий у використанні, просто видаліть перше .з необробленої URL-адреси. Наприклад, це:

https://raw.github.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

перетвориться на це

https://rawgithub.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

а потім ви поміщаєте його в <script>тег відповідного типу. Це просто!

Вони обмежують кількість запитів, оскільки вони призначені лише для цілей розвитку, а не для виробництва.

2014 ред

Як згадував Reinderien, rawgithub тепер просто rawgit, тому нове посилання на скрипт було б

https://rawgit.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

6
Це написано прямо на домашній сторінці rawgithub, не використовуйте його для виробничих сайтів . Крім того, це не офіційний сайт Github.
НезадоволенняГота

1
Я ніколи не казав, що це не так
Зак Сосьє

1
Примітка - тепер це переадресація на rawgit.com. І це працює!
Reinderien

1
Зараз цей веб-сайт надає 403 запитів, і заголовки повідомляють, що це захід.
Майкл

@Michael Sad :( На щастя rawgit надав кілька альтернатив на своєму веб-сайті, тому я оновив свою відповідь із наданими.
Зах Сосьє

6

Розширення файлу не має значення, саме значення має заголовок Content-Type, і цей файл подається з text/plainтипом вмісту (що є метою "сировинного" перегляду Github).

Вам слід дійсно завантажити копію файлу локально на свій сайт і включити його звідти. Навіть якщо це працювало від Github, оскільки ви не завантажуєте файл JS асинхронно, введення цього <script>тегу у заголовку сторінки робить ваш сайт залежним від доступності Github.


8
"Ви дійсно повинні завантажити копію цього файлу локально на свій сайт і включити його звідти", ось ключ. Його не призначено приймати від GitHub.
Восьминіг

@ Octopus ми можемо налаштувати завантаження та зберігання локальної копії цього документа, а потім програмно вказувати на нього сценарій ..
Sudip Bhandari


1

Як зазначає bybe, проблема полягає в тому, що майже весь вміст, який обслуговується raw.github.com, надсилається у вигляді текстового файлу - таким чином, вміст виводиться у простому тексті у вашому браузері без будь-яких інших програм та проблем, які не заважають. В іншому випадку ви потрапите в ситуацію, коли спроба перегляду .js-файлу може призвести до того, що браузер намагається запустити його, а не показувати вам.

Крім цього, ні github, ні pages.github не намагаються бути CDN. Ви дійсно повинні:

  1. Розмістіть файл самостійно, він не такий великий.
  2. Використовуйте спеціальний CDN для цього та інших статичних файлів на вашому сайті.
  3. Використовуйте щось на зразок cdnjs.com, у якому доступні різні версії файлів lessjs .
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.