@ BoltClock'un cevabındaki yorumlarda neredeyse belirtildiği gibi, modern tarayıcılarda , url()
svg <foreignObject>
öğesiyle birlikte ( ) kullanarak sözde öğelere bazı html işaretlemesi ekleyebilirsiniz .
Gerçek bir svg dosyasına işaret eden bir URL belirtebilir veya dataURI sürümüyle oluşturabilirsiniz ( data:image/svg+xml; charset=utf8, + encodeURIComponent(yourSvgMarkup)
)
Ancak, bunun çoğunlukla bir saldırı olduğunu ve birçok sınırlama olduğunu unutmayın:
- Bu işaretlemeden herhangi bir harici kaynak yükleyemezsiniz (CSS yok, görüntü yok, medya yok vb.).
- Komut dosyası yürütemezsiniz.
- Bu DOM'un bir parçası olmayacağından, değiştirmenin tek yolu, biçimlendirmeyi dataURI olarak geçirmek ve bu dataURI'yı düzenlemek
document.styleSheets
. bu bölüm için DOMParser
ve yardımcıXMLSerializer
olabilir .
- Aynı işlem,
<img>
etiketlerde url kodlu medya yüklememize izin verirken , bu sözde öğelerde çalışmaz (en azından bugün itibariyle, olmaması gereken herhangi bir yerde belirtilip belirtilmediğini bilmiyorum, bu yüzden henüz uygulanmayan bir özellik olabilir).
Şimdi, sözde bir öğede bazı html işaretlemesinin küçük bir demosu:
/*
** original svg code :
*
*<svg width="200" height="60"
* xmlns="http://www.w3.org/2000/svg">
*
* <foreignObject width="100%" height="100%" x="0" y="0">
* <div xmlns="http://www.w3.org/1999/xhtml" style="color: blue">
* I am <pre>HTML</pre>
* </div>
* </foreignObject>
*</svg>
*
*/
#log::after {
content: url('data:image/svg+xml;%20charset=utf8,%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2260%22%20width%3D%22200%22%3E%0A%0A%20%20%3CforeignObject%20y%3D%220%22%20x%3D%220%22%20height%3D%22100%25%22%20width%3D%22100%25%22%3E%0A%09%3Cdiv%20style%3D%22color%3A%20blue%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%3E%0A%09%09I%20am%20%3Cpre%3EHTML%3C%2Fpre%3E%0A%09%3C%2Fdiv%3E%0A%20%20%3C%2FforeignObject%3E%0A%3C%2Fsvg%3E');
}
<p id="log">hi</p>