Yayınlanma tarihi: 29 Ekim 2025
Chrome, XSLT desteğini sonlandırmayı ve bu özelliği tarayıcıdan kaldırmayı planlıyor. Bu dokümanda, 2026'nın sonlarında yapılacak kaldırma işleminden önce kodunuzu nasıl taşıyabileceğiniz açıklanmaktadır.
Chromium, XSLTProcessor JavaScript API ve XSLT işleme talimatı dahil olmak üzere XSLT desteğini resmi olarak sonlandırdı. 158 sürümünden (17 Kasım 2026) itibaren desteği kaldırmayı planlıyoruz. Firefox ve WebKit projeleri de XSLT'yi tarayıcı motorlarından kaldırmayı planladıklarını belirtmiştir. Bu belgede, konuyla ilgili geçmişe ve bağlama dair bilgiler verilmekte, Chrome'u daha güvenli hale getirmek için XSLT'yi nasıl kaldırdığımız açıklanmakta ve bu özellikler tarayıcıdan kaldırılmadan önce geçiş yapma yolu sunulmaktadır. En son güncellemeler için Chrome Platform Statüsü girişine de bakın.
Kaldırılan özellikler nelerdir?
Tarayıcıda XSLT'yi uygulayan iki API vardır ve her ikisi de kaldırılmaktadır:
- XSLTProcessor sınıfı (örneğin,
new XSLTProcessor()). - XSLT İşleme Talimatı (ör.
<?xml-stylesheet type="text/xsl" ... ?>).
Chrome için Zaman Çizelgesi
Chrome'un planı şu şekildedir:
- Chrome 142 (28 Ekim 2025): Chrome'a erken uyarı konsol mesajları eklendi.
- Chrome 143 (2 Aralık 2025): API'nin resmi olarak kullanımdan kaldırılması. Konsolda ve Lighthouse'da kullanımdan kaldırma uyarı mesajları gösterilmeye başlar.
- Chrome 145 (2 Aralık 2025 Canary): Canary, Dev ve Beta sürümlerinde, erken uyarı olarak XSLT varsayılan olarak devre dışı bırakılmaya başlar.
- Chrome 146 (10 Mart 2026): Kurumsal politika (EP) test için kullanıma açılıyor. Bu sayede kuruluşlar, XSLT'yi devre dışı bırakmayı erkenden test edebilir ve özellikleri kaldırılma tarihinden sonra da kullanmaya devam edebilir.
- Chrome 152 (25 Ağustos 2026): Kaynak denemesi (OT) test için kullanıma açılıyor. Bu sayede siteler, özellikleri kaldırılma tarihinden sonra da kullanmaya devam edebilir.
- Chrome 154 (22 Eylül 2026): Webview Canary, Dev ve Beta sürümlerinde, erken uyarı olarak XSLT varsayılan olarak devre dışı bırakılmaya başlar.
- Chrome 158 (17 Kasım 2026): XSLT, kaynak denemesi ve kurumsal politika katılımcıları dışındaki tüm kullanıcılar için kararlı sürümlerde çalışmayı durdurur.
- Chrome 176 (17 Ağustos 2027): Kaynak denemesi ve kurumsal politika artık işlevini yitirir. XSLT, tüm kullanıcılar için devre dışı bırakılır.
XSLT nedir?
XSLT veya Genişletilebilir Stil Sayfası Dili Dönüşümleri, XML dokümanlarını genellikle HTML gibi diğer biçimlere dönüştürmek için kullanılan bir dildir. Bu dönüşümün kurallarını tanımlamak için bir XSLT stil sayfası dosyası ve giriş olarak kullanılan verileri içeren bir XML dosyası kullanır.
Tarayıcılarda, bir XSLT stil sayfasına bağlantı veren bir XML dosyası alındığında tarayıcı, ham XML verilerini kullanıcı için oluşturulabilecek yapılandırılmış bir sayfaya (genellikle HTML) dönüştürmek, biçimlendirmek ve yeniden düzenlemek için bu stil sayfasındaki kuralları kullanır.
Örneğin, bir XSLT stil sayfası aşağıdaki XML girişini alabilir:
<?xml version=">1<.0"?
?xml-stylesheet type="text/xsl&quo>t<; hr>ef<=">demo.xsl" ?
<page
me>s<sage
> Hello World.
/message
/page
ve şu XSL stil sayfası:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Trans>for<m"
xsl:output meth>od=<"html"/
xsl:template m>atch=<&quo>t;/page</>message&q<uot;
body
pMes><sa>ge: x<sl:va>lue<-of select=&q>u<ot;."//p
> /body
/xsl:template
/xsl:stylesheet
ve bunları tarayıcının görüntülemesi için şu HTML'ye dönüştürür: HTML
<body>
<p>Message: Hello World.</p>
</body>
Önceki örnekte gösterilen XSL işleme talimatına ek olarak, yerel XML dokümanlarını yerel XSLT stil sayfalarıyla işlemek için kullanılabilen XSLTProcessor JavaScript API'si de vardır.
XSLT'nin geçmişi
XSLT, 16 Kasım 1999'da World Wide Web Consortium (W3C) tarafından XML dokümanlarını diğer biçimlere (en yaygın olarak web tarayıcılarında görüntülemek için HTML'ye) dönüştürmek için kullanılan bir dil olarak önerilmiştir. Resmi 1.0 önerisinden önce Microsoft, Mart 1999'da yayınlanan Internet Explorer 5.0'da bir W3C çalışma taslağına dayalı tescilli bir uygulama sunarak erken bir girişimde bulundu. Resmi standardı takip eden Mozilla, 2000'in sonlarında Netscape 6'da yerel XSLT 1.0 desteğini uyguladı. Safari, Opera ve daha sonra Chrome gibi diğer büyük tarayıcılar da yerel XSLT 1.0 işlemcilerini dahil ederek istemci tarafı XML'den HTML'ye dönüşümleri 2000'lerin başında uygulanabilir bir web teknolojisi haline getirdi.
XSLT dilinin kendisi de gelişmeye devam etti. 2007'de XSLT 2.0 ve 2017'de XSLT 3.0 yayınlandı. Bu sürümlerle birlikte normal ifadeler, iyileştirilmiş veri türleri ve JSON işleme özelliği gibi güçlü özellikler kullanıma sunuldu. Ancak tarayıcı desteği durakladı. Günümüzde tüm büyük web tarayıcı motorları yalnızca 1999'daki orijinal XSLT 1.0 için yerel destek sunmaktadır. Bu gelişim eksikliği, JSON'un kablo biçimi olarak kullanımının artması ve daha esnek ve güçlü DOM manipülasyonu ve şablon oluşturma imkanı sunan JavaScript kitaplıkları ve çerçevelerinin (jQuery, React ve Vue.js gibi) yükselişiyle birleşince istemci taraflı XSLT kullanımında önemli bir düşüşe yol açtı. Web tarayıcısındaki rolü, yerini büyük ölçüde bu JavaScript tabanlı teknolojilere bıraktı.
XSLT neden kaldırılmalıdır?
XSLT 1.0'ın web tarayıcılarında kullanılmaya devam etmesi, önemli ve gereksiz bir güvenlik riski oluşturuyor. Bu dönüşümleri işleyen temel kitaplıklar (ör. Chromium tarayıcılar tarafından kullanılan libxslt), karmaşık ve eski C/C++ kod tabanlarıdır. Bu tür kodlar, arabellek taşması gibi rastgele kod yürütmeye neden olabilen bellek güvenliği açıklarına karşı hassasiyetiyle bilinir. Örneğin, güvenlik denetimleri ve hata izleyiciler, bu ayrıştırıcılarda tekrar tekrar yüksek önem derecesine sahip güvenlik açıkları tespit etmiştir (ör. hem libxslt'de bulunan CVE-2025-7425 ve CVE-2022-22834). İstemci taraflı XSLT artık nadiren kullanılan niş bir özellik haline geldiğinden, bu kitaplıklar temel JavaScript motorlarına kıyasla çok daha az bakım ve güvenlik incelemesi görmektedir. Buna rağmen, güvenilmeyen web içeriklerinin işlenmesi konusunda doğrudan ve güçlü bir saldırı yüzeyi oluşturmaya devam etmektedir. Nitekim XSLT, tarayıcı kullanıcılarını riske atmaya devam eden, son dönemdeki pek çok önemli güvenlik açığının kaynağıdır. Bu hassas ve eski işlevi sürdürmenin güvenlik riskleri, sınırlı modern kullanımından çok daha ağır basmaktadır.
Ayrıca, istemci tarafı XSLT'nin asıl amacı olan verileri oluşturulabilir HTML'ye dönüştürme işlemi, daha güvenli, daha ergonomik ve daha iyi bakımı yapılan JavaScript API'leri tarafından devralınmıştır. Modern web geliştirme, verileri (genellikle JSON) almak için Fetch API ve XML veya HTML dizelerini tarayıcının güvenli JavaScript korumalı alanındaki bir DOM yapısına güvenli bir şekilde ayrıştırmak için DOMParser API gibi araçlara dayanır. React, Vue ve Svelte gibi çerçeveler, bu verilerin oluşturulmasını verimli ve güvenli bir şekilde yönetir. Bu modern araç zinciri aktif olarak geliştirilmektedir, JavaScript motorlarındaki devasa güvenlik yatırımından yararlanır ve günümüzde neredeyse tüm web geliştiricileri tarafından kullanılır. Aslında günümüzde web sayfası yüklemelerinin yalnızca yaklaşık %0, 02'sinde XSLT kullanılıyor ve %0, 001'den azında XSLT işleme talimatları kullanılıyor.
Bu, yalnızca Chrome veya Chromium'a özgü bir işlem değildir. Diğer iki büyük tarayıcı motoru da XSLT'nin web platformundan kaldırılmasını desteklemektedir: WebKit, Gecko.
Bu nedenlerden dolayı, XSLT'nin kullanımdan kaldırılması ve kaldırılması, tarayıcının tüm kullanıcılar için saldırı yüzeyini azaltır, web platformunu basitleştirir ve mühendislik kaynaklarının, geliştiriciler için pratik bir yetenek kaybı olmadan modern web'i gerçekten destekleyen teknolojilerin güvenliğini sağlamaya odaklanmasına olanak tanır.
XML ayrıştırma güvenliğini iyileştirme
libxslt'deki ciddi güvenlik sorunlarına benzer şekilde, Chromium'da XML'in ayrıştırılması, serileştirilmesi ve doğru biçimlendirilmesinin test edilmesi için kullanılan libxml2 ile ilgili ciddi güvenlik sorunları yakın zamanda bildirildi. Chromium'da XML ayrıştırmayla ilgili gelecekteki güvenlik sorunlarını gidermek için libxml2 kullanımını aşamalı olarak kaldırmayı ve XML ayrıştırmayı Rust'ta yazılmış, bellek açısından güvenli bir XML ayrıştırma kitaplığıyla değiştirmeyi planlıyoruz. Önemli bir nokta olarak, XML'i tarayıcıdan kaldırmayacağız. Burada yalnızca XSLT'nin kaldırılması değerlendiriliyor. libxml2'nin değiştirilmesinin web geliştiricileri için tamamen şeffaf olmasını sağlamayı amaçlıyoruz.
XML + CSS kaldırılmıyor
XSLT'nin (<?xml-stylesheet type="text/xsl" ... ?>) desteğinin sonlandırılması ile CSS ile kullanıldığında desteklenmeye devam eden <?xml-stylesheet ... ?> işleme talimatının kendisi arasındaki farkı anlamak önemlidir. HTML'de olduğu gibi, ham verilerinize standart düzen ve tasarım kuralları uygulamak için type="text/css" ile işleme talimatını kullanmaya devam edebilirsiniz. Örneğin:
<?xml version="1.0" encodin>g<="UTF-8"?
?xml-stylesheet type="tex>t</css>&qu<ot; >href="s<tyles>.<css&q>uot;?
root
itemContent here/item
/root
Taşıma işlemi nasıl yapılır?
Taşıma için birkaç alternatif yol vardır.
JSON
Tamamen XML ve XSL ile oluşturulmuş siteler için geçiş yapmanın herkese uygun tek bir yolu yoktur. Taşıma seçenekleri arasında, XSLT işleme ardışık düzenini sunucu tarafına taşıyıp oluşturulan HTML'yi istemciye gönderme veya sunucu tarafı XML API uç noktalarını JSON'a taşıyıp JSON'u HTML DOM ve CSS'ye dönüştürmek için JavaScript kullanarak istemci tarafı oluşturma işlemi gerçekleştirme yer alır.
JavaScript'te istemci tarafı XSLT
İstemci tarafında (JavaScript tabanlı) kullanılabilen birkaç XSLT kitaplığı vardır ancak açık ara en büyüğü Saxonica tarafından üretilmiştir (Saxonica ile ilgili kapsamlı dokümanları inceleyin). Bu uygulama, web tarayıcılarındaki XSLT 1.0 uygulamasının çok ötesine geçerek en yeni v3.0 standardı ve nihayetinde geliştirme aşamasındaki v4.0 standardı için tam destek sunar.
Polyfill
Web tarayıcılarının XSLT 1.0 uygulamalarına bağlı olan mevcut kodun, tarayıcıdaki yerel XSLT özelliklerini kullanmadan çalışmaya devam etmesini sağlamaya çalışan bir polyfill vardır. Polyfill, GitHub'da bulunur.
Polyfill, XSLTProcessor sınıfı için işlevsel, WASM tabanlı bir polyfill ile doldurulmuş bir alternatif içerir. Böylece mevcut JavaScript kodu olduğu gibi çalışmaya devam edebilir:
<script src="xslt-polyfill.mi><n.js&qu>ot<;/scri>pt
script
const xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsltDoc);
const fragment = xsltProcessor.transformToFragment(xmlDoc, d<ocument>);
/script
Polyfill, XSLT işleme talimatlarını kullanan XML dokümanlarını kolayca değiştirmek için otomatik bir hizmet işlevi de sağlar:
Bunun gibi orijinal bir demo.xml dosyası için:
<?xml version=">1<.0"?
?xml-stylesheet type="text/xsl&qu>o<t; h>ref="demo.xsl"?
ROOT
...content...
Polyfill'i çağırmak ve dokümanı referans verilen XSLT stil sayfasıyla dönüştürmek için bir satır eklenebilir:
<?xml version=">1<.0"?
?xml-stylesheet type="text/xsl&qu>o<t; h>r<ef="demo.xsl"?
ROOT
script src="xslt-polyfill.min.js"><
xml>ns="http://www.w3.org/1999/xhtml"/script
...content...
Bu durumda, yeni <script> öğesi polyfill'i yükler. Polyfill, XML belge türünü ve XSLT işleme talimatını algılar ve şeffaf bir şekilde yükleyerek belgenin yerini alır.
Uzantı
Ayrıca, desteklenen tarayıcılara eklenebilen bir Chrome uzantısı da vardır. Bu uzantı, XSLT işleme talimatları veya XSLTProcessor çağrıları içeren tüm ham XML sayfalarına aynı XSLT polyfill'i uygular. Bu, işlevselliği korumak için kaynak XML veya XSLT'nin değiştirilemediği uygulamalarda kullanılabilir.
Özellikle XSLT devre dışı bırakıldığında Chrome artık kullanıcıların bir uzantı bulmasına yardımcı olmak için doğrudan uzantı arama sayfasına bağlantı veren bir uyarı banner'ı gösterir:

Özel kullanım alanları
HTML standartlarıyla ilgili tartışmada, birkaç somut kullanım alanı belirlendi. Bu bölümde, günümüzde XSLT kullanan XML kaynakları yayınlayan geliştiricilere önerilen yolları sunmak için her birinden ayrı ayrı bahsedilmektedir.
RSS ve Atom Feed'leri
Mevcut birçok RSS veya Atom feed'inde, ham XML feed'lerini doğrudan tarayıcıda görüntülendiğinde kullanıcılar tarafından okunabilir hale getirmek için XSLT kullanılır. Birincil kullanım alanı, bir kullanıcı yanlışlıkla bir sitenin RSS özet akışı bağlantısını tıkladığında, bu bağlantıyı RSS okuyucusuna yapıştırmak yerine ham XML'in kendisi yerine okuyabileceği biçimlendirilmiş bir HTML yanıtı almasıdır.
Bu kullanım alanı için iki yol vardır. Bunu yapmanın "standart" HTML yöntemi, kullanıcıların yanlışlıkla tıklayabileceği açık (kullanıcı tarafından görülebilen) bir <a
href="something.xml"> eklemek yerine (HTML tabanlı) bir siteye <link rel="alternate" type="application/rss+xml"> eklemektir. Bu çözüm, kullanıcı yalnızca web sitesi URL'sini yapıştırırsa RSS okuyucuların feed'i bulmasına olanak tanır. Ayrıca, kullanıcıların bir XML kaynağına yönlendiren bağlantı nedeniyle kafası karışmadan normal HTML içeriğini görmesini sağlar. Bu, HTML'nin insanlar, XML'in ise makineler için olduğu normal web paradigmasına da uygundur. Elbette bu, kullanıcının bir yerden RSS bağlantısı "aldığı" ve bunu (RSS okuyucusu yerine) web tarayıcısına yapıştırdığı durumu çözmez.
Bu çözüm istenmediğinde polyfill başka bir yol sunar. Daha önce de belirtildiği gibi, RSS/Atom XML feed'i, HTML'ye XSLT tabanlı dönüşümün mevcut davranışını koruyacak tek bir satır (<script
src="xslt-polyfill.min.js" xmlns="http://www.w3.org/1999/xhtml"></script>) ile genişletilebilir.
<script>, kök öğenin doğrudan alt öğesi olduğundan bu durum, RSS okuyucunun XML'yi ayrıştırmaya devam etme özelliğini etkilemez.
Yerleşik cihazlar için API çıkışı
Bazı ticari yerleşik cihazlar, yerel ağdaki kullanıcıların tüketimi için XML verilerini ölçer veya başka bir şekilde oluşturur. Bu cihazlardan bazıları, XSLT kullanarak insan tarafından okunabilir bir HTML biçimine dönüştüren tek bir XML veri feed'i oluşturarak bunu yapar. Bu sayede API, cihazda veya tarayıcıda ek kod gerekmeden doğrudan tarayıcıda görüntülenebilir.
Bu, uygulamaya özel bir kullanım alanı olduğundan çözümün şekli değişiklik gösterebilir. Yerleşik cihazın kaynak kodunun güncellenebildiği uygulamalarda, daha önce açıklanan seçeneklerden herhangi biri (JSON, Polyfill) kullanılabilir. Ancak özellikle bu tür cihazların birçoğunun çeşitli nedenlerle güncellenmesi zor veya imkansızdır. Bu durumda, istemci tarayıcılarının verileri cihazı değiştirmeden tam olarak aynı şekilde okumaya devam etmesine olanak tanıdığı için uzantı muhtemelen en iyi seçenektir.
Web siteleri için geç yüklenen şablonlar
Web geliştiricileri, sunum işaretlemesini anlamsal işaretlemeye uygulamak için bazen istemci tarafında XSLT kullanır. Bu, JavaScript ekosisteminden ayrı, geç yüklenen bir şablon dili olarak işlev görür.
Bu daha genel sorunun iki çözümü vardır. Bu şekilde oluşturulmuş mevcut bir site için en kolay çözüm, mevcut işlevselliği korumak için polyfill'i eklemektir. XSLT dönüşümünü sunucu tarafında gerçekleştirip ham XML yerine elde edilen HTML'yi istemciye sunabilirsiniz. Bu tür mülkler için daha uzun vadeli çözüm, daha modern bir JavaScript veya JSON tabanlı çerçeveye geçiş yapmak olacaktır.
Chrome'da bu XSLT desteğinin sonlandırılmasıyla ilgili belirli bir sorunla karşılaşırsanız buradan hata bildirin.
XSLT kullanımını tespit etme
Genellikle, XSLT gibi desteği sonlandırılan özellikler kod tabanınızda birkaç şekilde tespit edilebilir. Bu bölümde bunlardan ikisi açıklanmaktadır.
Reporting API
Reporting API, web uygulamalarının, özelliklerin kullanımdan kaldırılması da dahil olmak üzere çeşitli platform özellikleri ve koşulları hakkında rapor oluşturmak için kullandığı genel bir raporlama mekanizmasıdır. XSLT'nin kullanımdan kaldırılmasıyla ilgili rapor oluşturmak için aşağıdaki gibi bir kod snippet'i kullanılabilir:
new ReportingObserver((reports, observer) => {
reports.forEach((report) => {
if (report.body.id === "XSLT") {
// XSLT usage was detected - report it back here.
}
});
}, {types: ["deprecation"],buffered: true}).observe();
Bu kodun CodePen'de nasıl çalıştığını görün.
Kurumsal Eski Teknoloji Raporu
Kuruluş yöneticileri, kullanımdan kaldırılan özelliklerin kullanımını otomatik olarak toplamak ve bunları kullanıcı dostu bir şekilde raporlamak için Eski Teknoloji Raporu'nu kullanabilir. Bu özelliği nasıl etkinleştireceğiniz hakkında daha fazla bilgi için bu Google Destek makalesine göz atın.