Пов’язати та виконати зовнішній файл JavaScript, розміщений на GitHub


545

Коли я намагаюся змінити пов'язане посилання локального файлу JavaScript на необроблену версію GitHub, мій тестовий файл перестає працювати. Помилка:

Відмовляється виконувати скрипт з ..., оскільки його тип MIME ( text/plain) не виконується, і сувора перевірка типу MIME включена.

Чи є спосіб відключити цю поведінку чи є служба, яка дозволяє посилатися на файли GitHub?

Робочий код:

<script src="bootstrap-wysiwyg.js"></script>

Неробочий код:

<script src="https://raw.github.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js"></script>

3
rawgit.com - це новий домен
Мухаммед Умер


1
@MuhammadUmer - лише якщо ваші вихідні файли ніколи не змінюються . rawgitкеш ніколи не оновлюється .
vsync

3
2019: ПІДТРИМУЙТЕ ВСІ ВІДПОВІДИ НАВЧАЛЬНОГО СЕРВІ АБО РАВГІТА Раггіт мертвий. Спустіться до відповіді від chharwey та оновіть її, поки вона не дістається до вершини. Це добре: найпростіший, який використовує офіційний переважний GitHub підхід.
Марко Фаустінеллі

1
Використовуйте jsdelivr.com/?docs=gh , це працює
AuthorProxy

Відповіді:


1018

Зараз для цього є вдале вирішення, використовуючи jsdelivr.net .

Кроки :

  1. Знайдіть своє посилання на GitHub та натисніть на версію "Raw".
  2. Скопіюйте URL-адресу.
  3. Змінити raw.githubusercontent.comнаcdn.jsdelivr.net
  4. Вставте /gh/перед своїм ім'ям користувача.
  5. Видаліть branchім’я.
  6. (Необов’язково) Вставте версію, до якої потрібно зв’язати, як @version(якщо цього не зробити, ви отримаєте останню - це може спричинити довготривале кешування)

Приклади :

http://raw.githubusercontent.com/<username>/<repo>/<branch>/path/to/file.js

Використовуйте цю URL-адресу, щоб отримати останню версію:

http://cdn.jsdelivr.net/gh/<username>/<repo>/path/to/file.js

Використовуйте цю URL-адресу, щоб отримати конкретну версію або скористатися хешем:

http://cdn.jsdelivr.net/gh/<username>/<repo>@<version or hash>/path/to/file.js

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


Для чого це потрібно?

У 2013 році GitHub почав використовувати X-Content-Type-Options: nosniff, що дає змогу більш сучасним браузерам застосовувати сувору перевірку типу MIME. Потім він повертає необроблені файли типу MIME, повернені сервером, не дозволяючи браузеру використовувати файл за призначенням (якщо браузер шанує налаштування).

Щоб дізнатися більше про цю тему, зверніться до цієї теми обговорення .


14
Також працює для сутичок. Я був в змозі замінити gist.githubusercontent.comз rawgist.comі отримав це працює.
haridsv

3
Я не знаю, хто підтримує цей сайт rawgit, але не використовую його у виробництві. У вас є невідома третя сторона, яка може вводити на ваш сайт будь-який JavaScript.
neves

1
@Maciej Krawczyk - так - сторінка явно спонукає вас використовувати саме конкретні посилання, а не гілку, саме з цієї причини.
Трой Алфорд

4
rawgit зараз припинено (станом на 2018-10-08): rawgit.com . рекомендуємо оновити цю відповідь.
chharvey

1
Дякую, що вказав на це @chharvey - я оновив відповідь, щоб відобразити jsdelivr.net
Трой


25

rawgithub.comперенаправлення на rawgit.comОтже, вищенаведений приклад був би зараз

http://rawgit.com/user/package/master/link.min.js


Відвідайте rawgit.com та вставте URL-адресу для файлу чи суті. Він створить дійсний URL для вас.
Марсело Вані

8
rawgit зараз припинено (станом на 2018-10-08): rawgit.com . рекомендуємо оновити цю відповідь.
chharvey

10

GitHub Pages - офіційне рішення цієї проблеми GitHub.

raw.githubusercontentзмушує всі файли використовувати text/plainтип MIME, навіть якщо файл - це CSS або JavaScript. Таким чином, це https://raw.githubusercontent.com/‹user›/‹repo›/‹branch›/‹filepath›буде не правильний тип MIME, а натомість файл простого тексту, а посилання на нього через <link href="..."/>або <script src="..."></script>не працюватиме - CSS не застосовуватиметься / JS не працюватиме.

Сторінки GitHub розміщують ваше репо за спеціальною URL-адресою, тому все, що вам потрібно зробити, це зареєструвати свої файли та натиснути. Зверніть увагу , що в більшості випадків, GitHub Pages вимагає від вас зробити спеціальну галузь, gh-pages.

На вашому новому веб-сайті, як правило https://‹user›.github.io/‹repo›, gh-pagesу цьому URL-адресі присутній кожен файл, присвоєний гілці (остання фіксація). Тоді ви можете зв’язатись з вашим js-файлом через <script src="https://‹user›.github.io/‹repo›/file.js"></script>, і це буде правильний тип MIME.

У вас є файли збірки?

Особисто я рекомендую запускати цю гілку паралельно master. На gh-pagesгілці ви можете редагувати свій .gitignoreфайл, щоб перевірити всі потрібні для вашого веб-сайту файли dist / build (наприклад, якщо у вас є будь-які скомпільовані / складені файли), не враховуючи при цьому їх ігнорування у вашій masterгілці. Це корисно, оскільки зазвичай ви не хочете відслідковувати зміни у файлах збірки у звичайному репо-репо. Кожен раз , коли ви хочете оновити файли , розміщені просто зливаються masterв gh-pages, перебудовувати фіксації, а потім натисніть кнопку.

(protip: за допомогою цих кроків ви можете об'єднатись і відновити в одному і тому ж виконанні :)

$ git checkout gh-pages
$ git merge --no-ff --no-commit master  # prepare the merge but dont commit it (as if there were a merge conflict)
$ npm run build                         # (or whatever your build process is)
$ git add .                             # stage the newly built files
$ git merge --continue                  # commit the merge
$ git push origin gh-pages

8

Наведені вище відповіді чітко відповідають на питання, але я хочу надати ще одну альтернативу - інший погляд / підхід до вирішення подібної проблеми.

Ви також можете використовувати розширення браузера, щоб видалити X-Content-Type-Optionsзаголовок відповіді для raw.githubusercontent.comфайлів. Для зміни заголовків відповідей є кілька розширень браузера.

  1. Запит: Chrome + Firefox
  2. Змінення заголовків: Firefox

Якщо ви використовуєте Requestly, я можу запропонувати два рішення

Рішення 1: Використовуйте правило Змінення заголовків і видаліть заголовок відповіді

Кроки

  1. Встановити запит із http://www.requestly.in
  2. Перейдіть на сторінку правил
  3. Клацніть на Додати значок, щоб створити правило
  4. Виберіть Змінити заголовки
  5. Дайте ім’я та опис
  6. Виберіть Remove-> Response->X-Content-Type-Options
  7. У полі Джерело введіть Url-> Contains->raw.githubusercontent.com

Рішення 2: Використовуйте Замінити правило хоста

  1. Встановити запит із http://www.requestly.in
  2. Перейдіть на сторінку правил
  3. Клацніть на Додати значок, щоб створити правило
  4. Замініть raw.githubusercontent.comнаrawgit.com

Перевірте цей скріншот для отримання більш детальної інформаціївведіть тут опис зображення

Як тестувати

Ми створили простий JS Fiddle, щоб перевірити, чи не можемо ми використовувати сировинні файли github як сценарії в нашому коді. Ось Скрипка із наступним кодом

<center id="msg"></center>

<script src="https://raw.githubusercontent.com/sachinjain024/practicebook/master/web-extensions-master/storage/background.js"></script>
<script>
try {
  if (typeof BG.Methods !== 'undefoned') {
    document.getElementById('msg').innerHTML = 'Script evaluated successfully!';
  }
} catch (e) {
  document.getElementById('msg').innerHTML = 'Problem evaluating script';
}
</script>

Якщо ви бачите Script evaluated successfully!, це означає, що ви можете використовувати необроблений файл github у своєму коді. Інакше Problem evaluating scriptвказує на те, що під час виконання скрипту із сировинного джерела github існує певна проблема.

Я також написав статтю в блозі Requestly про це. Будь ласка, зверніться до нього для отримання більш детальної інформації.

Сподіваюся, це допомагає !!

Відмова: Я автор запиту за запитом, щоб ви могли звинувачувати у всьому, що вам не подобається.


8

https://raw.githack.com/

виявив, що цей сайт постачає CDN для

  • видалити nosniffзаголовок http
  • виправити mime typeза назвою ext

і цей сайт:

https://rawgit.com/

ПРИМІТКА. RawGit закінчився термін корисного використання


5

Щоб все було зрозуміло і коротко

//raw.githubusercontent.com -> //rawgit.com

Зауважте, що цим займається хостинг розробки rawgit, а не їх cdn для хостингу виробництва


Невисока URL-адреса за замовчуванням змінилася з моменту цієї відповіді, тому перехід зараз https://raw.githubusercontent.com-> https://rawgit.comІнакше ця відповідь є найяснішою та працює.
mikeym

4
rawgit зараз припинено (станом на 2018-10-08): rawgit.com . рекомендуємо оновити цю відповідь.
chharvey

4

Моє використання полягало в тому, щоб завантажити " bookmarklets " direclty з мого облікового запису Bitbucket, який має ті ж обмеження, що і Github. Робота навколо, яку я придумав, полягала в тому, щоб сценарій AJAX був виконаний у сценарії, який виконується evalна рядку відповідей, нижче фрагмент базується на такому підході.

<script>
    var sScriptURL ='<script-URL-here>'; 
    var oReq = new XMLHttpRequest(); 
    oReq.addEventListener("load", 
       function fLoad() {eval(this.responseText + '\r\n//# sourceURL=' + sScriptURL)}); 
    oReq.open("GET", sScriptURL); oReq.send(); false;
</script>

Зауважте, що додавання sourceURLкоментаря - це можливість налагодження сценарію в інструментах для розробників браузера.


1

Коли файл завантажується в github, ви можете використовувати його як зовнішнє джерело або безкоштовний хостинг. Трой Альфорд пояснив це вище. Але для того, щоб було легше, дозвольте мені розповісти вам кілька простих кроків, тоді ви можете використовувати файл github raw на вашому сайті:

Ось посилання на ваш файл:

https://raw.githubusercontent.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js

Тепер для його виконання потрібно видалити https: // і крапку (.) Між raw і githubusercontent

Подобається це:

rawgithubusercontent.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js

Тепер, коли ви відвідаєте це посилання, ви отримаєте посилання, яке можна використовувати для виклику вашого javascript:

Ось заключне посилання:

https://rawgit.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js

Аналогічно, якщо ви розміщуєте файл css, ви повинні зробити це, як було зазначено вище. Це найпростіший спосіб отримати просте посилання для виклику вашого зовнішнього файлу css або javascript, розміщеного на github.

Я сподіваюся, що це корисно.

URL-адреса: http://101helper.blogspot.com/2015/11/store-blogger-codes-on-github-boost-blogger-speed.html


3
rawgit зараз припинено (станом на 2018-10-08): rawgit.com . рекомендуємо оновити цю відповідь.
chharvey

1

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

Для доказу ви можете спробувати ці два файли з одним і тим же кодом легкої сторінки:

без коментарів

з коментарем


1

У мене було те саме питання, що і у вас, те, що я зробив, - це змінити

<script type="application/javascript" src="bootstrap-wysiwyg.js"></script>

Це працює для мене.


змінити від чого до чого? покажіть, будь ласка, перед і після
Олександр Міллс

0

Найпростіший спосіб:
<script type="text/plain" src="http://raw.githubusercontent.com/user/repo/branch/file.js"></script>
обслуговується GitHub
та

дуже

надійний.
З text/plain
введіть тут опис зображення Безtext/plain
введіть тут опис зображення


Це найкраще рішення, воно просто працює і має стільки сенсу.
a20

2
ні. все це - це завадить навіть запустити сценарій
Стівен Пенні

2
Це не буде працювати вже скоро. З моєї логката на пристрої Android: "Вилучення сценаріїв з недійсними атрибутами типу / мови застаріле і буде видалено в M56, приблизно в січні 2017 року. Докладніше див. У Chromeestatus.com/features/5760718284521472 ".
Jens Hauke

0

raw.github.comце не справжній необроблений доступ до файлового ресурсу, але перегляд, наданий Rails. Тому доступ raw.github.comнабагато важчий, ніж потрібно. Я не знаю, чому raw.github.comце реалізується як подання Rails. Замість того, щоб виправити цю проблему з маршрутом, GitHub додав X-Content-Type-Options: nosniffзаголовок.

Обхід:

  • Покладіть сценарій до user.github.io/repo
  • Використовуйте сторонні CDN, як rawgit.com.

Для всіх, хто з цим бентежить, вони це зробили навмисно. Ви раніше могли просто використовувати raw.github.comдля завантаження файлів - і тоді github зрозумів, що вони використовуються як CDN, що спричиняє їм надто великий трафік. Як результат, вони змінили його на цей тип візуалізації із X-Content-Type-Options: nosniffзаголовком, зокрема, щоб унеможливити використання таким сервісом людей.
Трой Алфорд

0

Крім того, якщо генерується ваша розмітка на сервері, ви можете просто взяти та ввести. Наприклад, у JSTL ви можете зробити це:

<script type="text/javascript">
    <c:import url="https://raw.github.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js" />
</script>

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


0

Приклад


оригінальний

https://raw.githubusercontent.com/antelove19/qrcodejs/master/qrcode.min.js

cdn.jsdelivr.net

https://cdn.jsdelivr.net/gh/antelove19/qrcodejs/qrcode.min.js
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.