Tautkan dan jalankan file JavaScript eksternal yang dihosting di GitHub


546

Ketika saya mencoba mengubah referensi tertaut dari file JavaScript lokal ke versi mentah GitHub, file pengujian saya berhenti berfungsi. Kesalahannya adalah:

Menolak untuk menjalankan skrip dari ... karena tipe MIME-nya ( text/plain) tidak dapat dieksekusi, dan pengecekan tipe MIME yang ketat diaktifkan.

Apakah ada cara untuk menonaktifkan perilaku ini atau apakah ada layanan yang memungkinkan menautkan ke file mentah GitHub?

Kode kerja:

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

Kode tidak bekerja:

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

3
rawgit.com adalah domain baru sekarang
Muhammad Umer


1
@MuhammadUmer - hanya jika file sumber Anda tidak pernah berubah . rawgitcache tidak pernah diperbarui .
vsync

3
2019: HANYA SKIP SEMUA JAWABAN YANG MENYEBUTKAN BAKU ATAU SANGAT. Rawgit sudah mati. Pergilah ke jawaban dari chharwey dan tingkatkan sampai nilai tertinggi. Itu yang bagus: paling sederhana, yang menggunakan pendekatan resmi GitHub.
Marco Faustinelli

1
Gunakan jsdelivr.com/?docs=gh , berfungsi
AuthorProxy

Jawaban:


1018

Ada adalah solusi yang baik untuk ini, sekarang, dengan menggunakan jsdelivr.net .

Langkah-langkah :

  1. Temukan tautan Anda di GitHub, dan klik ke versi "Raw".
  2. Salin URL.
  3. Ubah raw.githubusercontent.comkecdn.jsdelivr.net
  4. Masukkan /gh/sebelum nama pengguna Anda.
  5. Hapus branchnama.
  6. (Opsional) Masukkan versi yang ingin Anda tautkan, karena @version(jika Anda tidak melakukan ini, Anda akan mendapatkan yang terbaru - yang dapat menyebabkan caching jangka panjang)

Contoh :

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

Gunakan URL ini untuk mendapatkan versi terbaru:

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

Gunakan URL ini untuk mendapatkan versi tertentu atau melakukan hash:

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

Untuk lingkungan produksi , pertimbangkan untuk menargetkan tag tertentu atau komit-hash daripada cabang. Menggunakan tautan terbaru dapat mengakibatkan penyimpanan file dalam jangka panjang, menyebabkan tautan Anda tidak diperbarui saat Anda mendorong versi baru. Menautkan ke file dengan commit-hash atau tag membuat tautan ini unik untuk versi.


Mengapa ini dibutuhkan?

Pada 2013, GitHub mulai menggunakan X-Content-Type-Options: nosniff, yang menginstruksikan lebih banyak browser modern untuk menegakkan pengecekan tipe MIME yang ketat. Ini kemudian mengembalikan file mentah dalam tipe MIME yang dikembalikan oleh server, mencegah browser menggunakan file seperti yang dimaksudkan (jika browser menghormati pengaturan).

Untuk latar belakang tentang topik ini, silakan merujuk ke utas diskusi ini .


14
Juga berfungsi untuk intisari. Saya bisa mengganti gist.githubusercontent.comdengan rawgist.comdan mendapatkannya bekerja.
haridsv

3
Saya tidak tahu siapa yang mempertahankan situs ini mentah-mentah, tetapi tidak menggunakannya dalam produksi. Anda akan memiliki pihak ketiga yang tidak dikenal yang dapat menyuntikkan javascript di situs Anda.
neves

1
@Maciej Krawczyk - ya - halaman secara eksplisit mendorong Anda untuk menggunakan tautan khusus, daripada tautan cabang, untuk alasan ini.
Troy Alford

4
rawgit sekarang dihentikan (pada 2018-10-08): rawgit.com . merekomendasikan memperbarui jawaban ini.
chharvey

1
Terima kasih telah menunjukkannya di @chharvey - Saya telah memperbarui jawaban untuk mencerminkan jsdelivr.net
Troy Alford


25

rawgithub.comredirect ke rawgit.comJadi contoh di atas sekarang akan menjadi

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


Kunjungi rawgit.com dan tempelkan url untuk file atau intinya. Ini akan menghasilkan url yang valid untuk Anda.
Marcelo Vani

8
rawgit sekarang dihentikan (pada 2018-10-08): rawgit.com . merekomendasikan memperbarui jawaban ini.
chharvey

10

GitHub Pages adalah solusi resmi GitHub untuk masalah ini.

raw.githubusercontentmembuat semua file menggunakan text/plaintipe MIME, bahkan jika file tersebut adalah file CSS atau JavaScript. Jadi https://raw.githubusercontent.com/‹user›/‹repo›/‹branch›/‹filepath›bukan jenis MIME yang benar tetapi akan menjadi file plaintext, dan menghubungkannya melalui <link href="..."/>atau <script src="..."></script>tidak akan berfungsi — CSS tidak akan berlaku / JS tidak akan berjalan.

GitHub Pages meng-host repo Anda di URL khusus, jadi yang harus Anda lakukan adalah check-in file Anda dan tekan. Perhatikan bahwa dalam kebanyakan kasus, Halaman GitHub mengharuskan Anda untuk berkomitmen ke cabang khusus gh-pages,.

Di situs baru Anda, yang biasanya https://‹user›.github.io/‹repo›, setiap file yang dikomit ke gh-pagescabang (komit terbaru) ada di url ini. Jadi, Anda dapat menautkan ke file js Anda melalui <script src="https://‹user›.github.io/‹repo›/file.js"></script>, dan ini akan menjadi tipe MIME yang benar.

Apakah Anda sudah membuat file?

Secara pribadi, rekomendasi saya adalah menjalankan cabang ini secara paralel master. Di gh-pagescabang, Anda dapat mengedit .gitignorefile Anda untuk memeriksa semua file dist / build yang Anda butuhkan untuk situs Anda (misalnya jika Anda memiliki file yang diperkecil / dikompilasi), sambil tetap mengabaikannya di mastercabang Anda . Ini berguna karena Anda biasanya tidak ingin melacak perubahan dalam file membangun di repo reguler Anda. Setiap kali Anda ingin memperbarui file host, hanya menggabungkan masterke dalam gh-pages, membangun kembali, komit, dan kemudian mendorong.

(protip: Anda dapat menggabungkan dan membangun kembali di komit yang sama dengan langkah-langkah ini :)

$ 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

Jawaban di atas dengan jelas menjawab pertanyaan tetapi saya ingin memberikan alternatif lain - Pandangan / pendekatan yang berbeda untuk menyelesaikan masalah yang sama.

Anda juga dapat menggunakan ekstensi browser untuk menghapus X-Content-Type-Optionsheader respons untuk raw.githubusercontent.comfile. Ada beberapa ekstensi browser untuk memodifikasi header respons.

  1. Diminta: Chrome + Firefox
  2. Ubah Tajuk: Firefox

Jika Anda menggunakan Requestly, saya dapat menyarankan dua solusi

Solusi 1: Gunakan Modify Headers Rule dan hapus tajuk respons

Langkah

  1. Instal Requestly dari http://www.requestly.in
  2. Buka Halaman Aturan
  3. Klik Tambahkan Ikon untuk membuat aturan
  4. Pilih Ubah Tajuk
  5. Beri Nama dan Deskripsi
  6. Pilih Remove-> Response->X-Content-Type-Options
  7. Di bidang Sumber, masukkan Url-> Contains->raw.githubusercontent.com

Solusi 2: Gunakan Ganti Aturan Host

  1. Instal Requestly dari http://www.requestly.in
  2. Buka Halaman Aturan
  3. Klik Tambahkan Ikon untuk membuat aturan
  4. Ganti raw.githubusercontent.comdenganrawgit.com

Periksa tangkapan layar ini untuk detail lebih lanjutmasukkan deskripsi gambar di sini

Cara menguji

Kami membuat JS Fiddle sederhana untuk menguji apakah kami dapat menggunakan file github mentah sebagai skrip dalam kode kami. Berikut adalah biola dengan kode berikut

<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>

Jika Anda melihat Script evaluated successfully!, itu berarti Anda dapat menggunakan file github mentah dalam kode Anda. Jika tidak, Problem evaluating scriptmenunjukkan bahwa ada beberapa masalah saat menjalankan skrip dari sumber github mentah.

Saya juga menulis artikel di blog Requestly tentang ini. Silakan merujuknya untuk detail lebih lanjut.

Semoga ini bisa membantu !!

Penafian: Saya penulis Requestly Jadi Anda bisa menyalahkan apa pun yang tidak Anda sukai.



5

Untuk membuat semuanya jelas dan singkat

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

Perhatikan bahwa ini ditangani oleh hosting pengembangan rawgit dan bukan cdn mereka untuk hosting produksi


URL baku default tampaknya telah berubah sejak jawaban ini sehingga konversi sekarang https://raw.githubusercontent.com-> https://rawgit.comJika tidak, jawaban ini paling jelas dan berfungsi.
mikeym

4
rawgit sekarang dihentikan (pada 2018-10-08): rawgit.com . merekomendasikan memperbarui jawaban ini.
chharvey

4

Kasus penggunaan saya adalah memuat direclty ' bookmarklets ' dari akun Bitbucket saya yang memiliki batasan yang sama dengan Github. Pekerjaan di sekitar saya datang adalah untuk AJAX untuk skrip dan dijalankan evalpada string respons, di bawah potongan didasarkan pada pendekatan itu.

<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>

Perhatikan bahwa menambahkan sourceURLkomentar adalah untuk memungkinkan debugging skrip dalam alat pengembang browser.


1

Ketika sebuah file diunggah ke github, Anda dapat menggunakannya sebagai sumber eksternal atau hosting gratis. Troy Alford telah menjelaskannya di atas. Tetapi untuk membuatnya lebih mudah, izinkan saya memberi tahu Anda beberapa langkah mudah maka Anda dapat menggunakan file mentah github di situs Anda:

Ini tautan file Anda:

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

Sekarang untuk menjalankannya Anda harus menghapus https: // dan titik (.) Antara raw dan githubusercontent

Seperti ini:

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

Sekarang ketika Anda akan mengunjungi tautan ini, Anda akan mendapatkan tautan yang dapat digunakan untuk memanggil javascript Anda:

Inilah tautan terakhir:

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

Demikian pula jika Anda meng-host file css Anda harus melakukannya seperti yang disebutkan di atas. Ini adalah cara termudah untuk mendapatkan tautan sederhana untuk memanggil file css atau javascript eksternal yang dihosting di github.

Saya harap ini bermanfaat.

URL referensi: http://101helper.blogspot.com/2015/11/store-blogger-codes-on-github-boost-blogger-speed.html


3
rawgit sekarang dihentikan (pada 2018-10-08): rawgit.com . merekomendasikan memperbarui jawaban ini.
chharvey

1

Saya menemukan kesalahan ditampilkan karena komentar di awal file, Anda dapat menyelesaikan masalah ini, dengan hanya membuat file Anda sendiri tanpa komentar dan push to git, itu tidak menunjukkan kesalahan

Sebagai bukti, Anda dapat mencoba kedua file ini dengan kode pagination yang sama:

tanpa komentar

dengan komentar


1

Saya memiliki masalah yang sama dengan Anda, apa yang saya lakukan adalah perubahan

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

Ini bekerja untuk saya.


berubah dari apa ke apa? tolong tunjukkan sebelum dan sesudah
Alexander Mills

0

Cara paling sederhana:
<script type="text/plain" src="http://raw.githubusercontent.com/user/repo/branch/file.js"></script>
Dilayani oleh GitHub,
dan

sangat

dapat diandalkan.
Dengan text/plain
masukkan deskripsi gambar di sini Tanpatext/plain
masukkan deskripsi gambar di sini


Ini adalah solusi terbaik, hanya berfungsi dan sangat masuk akal.
20

2
tidak. semua ini dilakukan adalah mencegah skrip agar tidak berjalan
Steven Penny

2
Tidak akan bekerja lagi segera. Dari logcat perangkat Android saya: "Mengambil skrip dengan atribut tipe / bahasa yang tidak valid sudah tidak digunakan lagi dan akan dihapus di M56, sekitar Januari 2017. Lihat chromestatus.com/features/5760718284521472 untuk detail lebih lanjut."
Jens Hauke

0

raw.github.combukan akses yang benar-benar mentah ke file aset, tetapi tampilan yang diberikan oleh Rails. Jadi mengakses raw.github.comjauh lebih berat dari yang dibutuhkan. Saya tidak tahu mengapa raw.github.comdiimplementasikan sebagai tampilan Rails. Alih-alih memperbaiki masalah rute ini, GitHub menambahkan X-Content-Type-Options: nosniffheader.

Penanganan masalah:

  • Masukkan skrip ke user.github.io/repo
  • Gunakan CDN pihak ketiga seperti rawgit.com.

Untuk orang lain yang bingung dengan ini, mereka melakukannya dengan sengaja. Anda dulunya hanya dapat digunakan raw.github.comuntuk memuat file - dan kemudian github menyadari bahwa mereka digunakan sebagai CDN, yang menyebabkan terlalu banyak lalu lintas. Akibatnya, mereka mengubahnya ke jenis rendering dengan X-Content-Type-Options: nosniffheader, khusus untuk mencegah orang menggunakan layanan mereka seperti itu.
Troy Alford

0

Atau, jika membuat sisi server markup Anda, Anda bisa mengambil dan menyuntikkan. Misalnya, di JSTL Anda dapat melakukan ini:

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

Mereka tidak mengizinkan hotlinking karena suatu alasan, jadi mungkin bentuk yang buruk jika Anda ingin menjadi warga negara yang baik. Saya sarankan Anda cache javascript itu dan hanya benar-benar mengambil ulang secara berkala sesuai keinginan Anda.


0

Contoh


asli

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

cdn.jsdelivr.net

https://cdn.jsdelivr.net/gh/antelove19/qrcodejs/qrcode.min.js
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.