Dołącz plik SVG (hostowany na GitHub) w MarkDown

173

Wiem, że obraz można umieścić w MD ze składnią MD albo ![Alt text](/path/to/img.jpg)lub ![Alt text](/path/to/img.jpg "Optional title"), ale mam trudności z umieszczeniem SVG w MD, gdzie kod jest hostowany na GitHub.

Ostatecznie używam rails3 i często zmieniam model w tej chwili, więc używam RailRoady do generowania SVG schematu schematu modeli. Chciałbym, aby ten plik SVG został następnie umieszczony w pliku ReadMe.md i wyświetlony. Kiedy otwieram plik SVG lokalnie, to działa, więc jak mam skłonić przeglądarkę do renderowania SVG w pliku MD? Biorąc pod uwagę, że kod będzie dynamiczny, dopóki nie zostanie sfinalizowany (najwyraźniej nigdy), umieszczenie SVG w oddzielnym miejscu wydaje się przesadą i brakuje mi podejścia, aby to osiągnąć.

Plik SVG, który próbuję dołączyć, jest tutaj na GitHub:https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/models_brief.svg

Wypróbowałem następujące rozwiązania, również z rzeczywistym obrazem, aby sprawdzić, czy składnia działa, ale kod SVG nie jest renderowany:

![Overview][1]
[1]: https://github.com/specialorange/FDXCM/blob/master/doc/controllers_brief.svg  "Overview"

<img src="https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg">

![Alt text](https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg)

[Google Doc](https://docs.google.com/drawings/d/1B95ajItJTAImL2WXISX0fkBLYk3nldea4Vm9eo-VyE4/edit) :

<img src="https://docs.google.com/drawings/pub?id=117XsJ1kDyaY-n8AdPS3_8jTgMyITqaoT3-ah_BSc9YQ&w=960&h=720">

<img src="https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg">

<img src="https://docs.google.com/drawings/d/1B95ajItJTAImL2WXISX0fkBLYk3nldea4Vm9eo-VyE4/edit">

aby uzyskać wyniki:

Przegląd 1 : https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/controllers_brief.svg „Overview”

Tekst alternatywny


Dokument Google :

chris Frisina
źródło
1
GitHub ma teraz odpowiedni otwarty raport o błędzie: github.com/github/markup/issues/556
sampablokuper
Aby zaoszczędzić ludziom kliknięcia, raport o błędzie na github został otwarty 13 października 2015 r.
Potherca

Odpowiedzi:

206

Celem raw.github.comjest umożliwienie użytkownikom przeglądania zawartości pliku, więc w przypadku plików tekstowych oznacza to (w przypadku niektórych typów zawartości) nieprawidłowe nagłówki i błędy w przeglądarce.

Kiedy zadano to pytanie (w 2012 r.), Pliki SVG nie działały. Od tego czasu Github wprowadził różne ulepszenia. Teraz (przynajmniej w przypadku SVG) wysyłane są prawidłowe nagłówki Content-Type.

Przykłady

Wszystkie opisane poniżej sposoby będą działać.

Skopiowałem obraz SVG z pytania do repozytorium na github , aby stworzyć poniższe przykłady

Łączenie do plików przy użyciu ścieżek względnych (działa, ale oczywiście tylko na github.com / github.io)

Kod

![Alt text](./controllers_brief.svg)
<img src="./controllers_brief.svg">

Wynik

Zobacz przykład roboczy na github.com .

Linkowanie do plików RAW

Kod

![Alt text](https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg)
<img src="https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg">

Wynik

Tekst alternatywny

Łączenie z plikami RAW przy użyciu ?sanitize=true

Kod

![Alt text](https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg?sanitize=true)
<img src="https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg?sanitize=true">

Wynik

Tekst alternatywny

Łączenie do plików hostowanych na github.io

Kod

![Alt text](https://potherca-blog.github.io/StackOverflow/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg)
<img src="https://potherca-blog.github.io/StackOverflow/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg">

Wynik

Tekst alternatywny


Kilka uwag dotyczących zmian, które zaszły po drodze:

  • Github zaimplementował funkcję, która umożliwia używanie plików SVG ze składnią obrazu Markdown. Obraz SVG zostanie oczyszczony i wyświetlony z poprawnym nagłówkiem HTTP. Niektóre tagi (takie jak <script>) są usuwane.

    Aby wyświetlić oczyszczony plik SVG lub osiągnąć ten efekt z innych miejsc (np. Z plików markdown, które nie są hostowane w repozytoriach na http://github.com/ ), wystarczy dołączyć ?sanitize=truedo surowego adresu URL SVG.

  • Jak stwierdził AdamKatz w komentarzach, korzystanie ze źródła innego niż github.io może stanowić potencjalne zagrożenie dla prywatności i bezpieczeństwa. Zobacz odpowiedź CiroSantilli i odpowiedź DavidaChambersa, aby uzyskać więcej informacji.

  • Kwestia rozwiązania tego problemu została otwarta na Github 13 października 2015 r. I rozwiązana 31 sierpnia 2017 r

Potherca
źródło
Żeby było jasne, mówisz, że obrazy SVG nie będą renderowane, prawda?
ShreevatsaR
@ShreevatsaR Nie, wszystko oprócz hotlinkowania pliku raw.github.com działa dobrze. Właśnie zmieniłem nazwę czegoś w repozytorium github i zapomniałem zaktualizować swoją odpowiedź, łamiąc przykłady. Naprawiono teraz.
Potherca
1
@ShreevatsaR Poprawne. Github nigdy nie wymienia widoku surowego jako sposobu na hosting plików, tylko do przeglądania, dlatego wysyła text/plainnagłówek.
Potherca
2
Ostrzeżenie: rawgit.com i rawgithub.com nie są własnością ani nie są obsługiwane przez GitHub, co wprowadza zagrożenia prywatności, a nawet bezpieczeństwa przed nadużyciami, jeśli nie ze strony obecnego właściciela, to być może przyszłego właściciela, jeśli rejestracja DNS wygaśnie. To sprawia, że ​​rozwiązanie github.io jest najbezpieczniejsze. Zobacz także odpowiedź @ CiroSantilli i odpowiedź @ davidchambers, które odnotowują ryzyko XSS, które to stwarza.
Adam Katz,
1
@MonsieurDart Do odpowiedzi dodałem Twoje obawy.
Potherca
36

Skontaktowałem się z GitHub, aby powiedzieć, że pliki SVG hostowane na github.io nie są już wyświetlane w plikach README GitHub. Otrzymałem odpowiedź:

Musieliśmy wyłączyć renderowanie obrazu svg na GitHub.com z powodu potencjalnych luk w zabezpieczeniach skryptów między witrynami.

davidchambers
źródło
3
Czekaj, czy to się dzieje? Nie wiedziałem.
Camilo Martin,
Co ciekawe, renderuje się na pokazie blobów: zobacz moją odpowiedź . Więc nie mogę zrozumieć, dlaczego nie w README.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
@CiroSantilli 六四 事件 法轮功 包 卓 轩 Obiekt blob używa elementu iframe, który nie może wykonywać XSS, tak jak może to zrobić osadzony SVG.
Petah
3
Przybyłem tutaj dokładnie szukając, czy to było możliwe. Dowód koncepcji, że jest to możliwe: jsfiddle.net/franciscop/krqea6gc
Francisco Presencia
1
Hm, kliknij tutaj, aby być świadkiem ataku XSS? Miły.
Adam Katz,
15

rawgit.com ładnie rozwiązuje ten problem. Dla każdego żądania pobiera odpowiedni dokument z GitHub i, co najważniejsze, podaje go z odpowiednim nagłówkiem Content-Type.

davidchambers
źródło
To jest niesamowite! Czy trzeba wkleić na stronie internetowej? lub można po prostu wpisać adres URL dynamicznie na przykład za pomocą skryptu. Chcę to uwzględnić w moim fragmencie TextExpandera.
eonista
Nie musisz najpierw odwiedzać strony internetowej, @GitSyncApp. :)
davidchambers
1
Odpowiadając sobie… 😄 RawGit nie działa w przypadku prywatnych repozytoriów
MonsieurDart
7
rawgit.com odchodzi. Według strony internetowej: „RawGit osiągnął koniec okresu użyteczności 8 października 2018 r. RawGit jest teraz w fazie wygaśnięcia i wkrótce zostanie zamknięty. To było fajne pięć lat, ale wszystko musi się skończyć. Repozytoria GitHub, które obsługiwały treści przez RawGit w ciągu ostatniego miesiąca będzie nadal obsługiwany co najmniej do października 2019 r. Adresy URL innych repozytoriów nie są już obsługiwane. Jeśli obecnie używasz RawGit, przestań go używać tak szybko, jak to możliwe. "
jeffhale,
1
Również z zapowiedzi wygaśnięcia rawgit.com: "Co powinieneś zamiast tego użyć Następujące bezpłatne usługi oferują fantastyczne alternatywy dla niektórych lub wszystkich funkcji RawGit. Możesz je polubić nawet bardziej niż RawGit. JsDelivr GitHub Pages CodeSandbox unpkg"
jeffhale
8

To zadziała. Połącz z plikiem SVG, używając następującego wzoru:

https://cdn.rawgit.com/<repo-owner>/<repo>/<branch>/path/to.svg

Wadą jest zakodowanie właściciela i repozytorium na ścieżce, co oznacza, że ​​plik SVG ulegnie awarii, jeśli nazwa któregoś z nich zostanie zmieniona.

Tanner Perrien
źródło
Inną wadą używania cdn.rawgit.comjest to, że „pliki są trwale buforowane na podstawie adresu URL”. Nigdy nie zaktualizuje się, jeśli zmodyfikujesz plik, chyba że zmienisz nazwę lub ścieżkę.
Mottie
@Mottie: rawgit ma teraz aktualizację: „Nowe zmiany, które wprowadzisz do GitHub, zostaną odzwierciedlone w ciągu kilku minut”.
eonista
Ważny! RawGit nie działa dla prywatnych repozytoriów
MonsieurDart
5
Aktualizacja 2018. Rawgit wygasa. Zobacz mój komentarz powyżej.
jeffhale,
8

Zaktualizuj 2017

Deweloper GitHub obecnie się tym zajmuje: https://github.com/github/markup/issues/556#issuecomment-306103203

Aktualizacja 2014-12 : GitHub renderuje teraz SVG na pokazie blobów , więc nie widzę powodu, by nie renderować na renderach README:

Zwróć również uwagę, że SVG ma próbę XSS, ale nie działa: https://raw.githubusercontent.com/cirosantilli/test/2144a93333be144152e8b0d4144b77b211afce63/svg.svg

Miliard śmiechu SVG sprawia, że ​​Firefox 44 zamraża, ale Chromium 48 jest w porządku: https://github.com/cirosantilli/web-cheat/blob/master/svg-billion-laughs.svg

Petah wspomniał, że bloby są w porządku, ponieważ SVG znajduje się wewnątrz pliku iframe.

Możliwe powody, dla których GitHub nie obsługuje obrazów SVG

Poniższe pytania dotyczą ogólnych zagrożeń związanych z SVG: /security/11384/exploits-or-other-security-risks-with-svg-upload

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
źródło
2
Przeglądarki nie uruchamiają skryptów, gdy dostęp do SVG uzyskuje się za pośrednictwem tagu obrazu. Zapraszam do sprawdzenia siebie.
Robert Longson
@RobertLongson Dzięki za korektę. Czy jest to określone w standardzie, dotyczy tylko typowego zachowania przeglądarki? Czy to jest zrobione dla bezpieczeństwa?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Zrobiono to dla prywatności i tak naprawdę nie jest w standardzie. Ludzie rozumieją, jak działają obrazy rastrowe i co mogą, a czego nie mogą, gdy są używane jako obraz Obrazy SVG powinny działać w ten sam sposób.
Robert Longson
4

Mam działający przykład z tagiem img, ale twoje obrazy nie będą wyświetlane. Różnica, którą widzę, to rodzaj treści.

Sprawdziłem obraz github z twojego postu (obrazy dokumentów google nie ładują się w ogóle z powodu awarii połączenia). Obraz z github jest dostarczany jako typ zawartości: tekst / zwykły, który nie zostanie wyrenderowany jako obraz przez Twoją przeglądarkę.

Prawidłowa wartość typu zawartości dla svg to image / svg + xml. Musisz więc upewnić się, że pliki svg ustawiają właściwy typ MIME, ale jest to problem z serwerem.

Wypróbuj z http://svg.tutorial.aptico.de/grafik_svg/dummy3.svg i nie zapomnij podać szerokości i wysokości w tagu.

Karsten S.
źródło
1

Skorzystaj z tej strony: https://rawgit.com , działa dla mnie, ponieważ nie mam problemu z uprawnieniami do pliku SVG.
Zwróć uwagę, że RawGit nie jest usługą github, jak wspomniano w FAQ Rawgita :

RawGit nie jest w żaden sposób powiązany z GitHubem. Prosimy nie kontaktować się z GitHub prosząc o pomoc z RawGit

Wprowadź adres URL pliku SVG, którego potrzebujesz, na przykład:

https://github.com/sel-fish/redis-experiments/blob/master/dat/memDistrib-jemalloc-4.0.3.svg

Następnie możesz uzyskać poniższy adres URL, którego można użyć do wyświetlenia:

https://cdn.rawgit.com/sel-fish/redis-experiments/master/dat/memDistrib-jemalloc-4.0.3.svg
samolubny
źródło
2
Ważny! RawGit nie działa dla prywatnych repozytoriów
MonsieurDart
1

Tak jak to działało dla mnie na Githubie.

![Imgae Caption](ImageAddressOnGitHub.svg)

lub

<img src="ImageAddressOnGitHub.svg">
Mohammad Heydari
źródło