Web bileşenleri söz konusu olduğunda, HTML ve JavaScript'ten oluşturulan widget'ların kullanımını zorlaştıran temel bir sorun vardır.
Sorun : Bir pencere öğesinin içindeki DOM ağacı, sayfanın geri kalanından kapsüllenmemiş. Bu kapsülleme eksikliği, belge stil sayfanızın pencere öğesi içindeki parçalara yanlışlıkla uygulanabileceği anlamına gelir; JavaScript'iniz yanlışlıkla pencere öğesi içindeki parçaları değiştirebilir; Kimlikleriniz, widget'ın içindeki kimliklerle çakışabilir vb.
Gölge DOM, DOM ağaç kapsülleme sorununu giderir .
Örneğin, aşağıdaki gibi işaretlemeniz varsa:
<button>Hello, world!</button>
<script>
var host = document.querySelector('button');
var root = host.createShadowRoot();
root.textContent = 'こんにちは、影の世界!';
</script>
o zaman yerine
Hello, world!
sayfan şöyle görünüyor
こんにちは、影の世界!
Sadece bu değil, sayfadaki JavaScript düğmenin textContent öğesinin ne olduğunu sorarsa, elde etmeyecek “こんにちは、影の世界!”
, ancak “Hello, world!”
gölge kökün altındaki DOM alt ağacı kapsüllendiği için .
NOT : Yukarıdaki içeriği https://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/ adresinden aldım çünkü gölge DOM'u burada zaten verilen cevaplardan biraz daha iyi anlamama yardımcı oldu. Başkalarına yardımcı olması için buraya alakalı içerik ekledim, ancak aynı konuda ayrıntılı tartışma için bağlantıya bir göz atın.