JavaScript Kaynaklarının Entegrasyonu
Wizard içi JavaScript kodunu KUT Script üreticisiyle, fiziksel JavaScript dosyalarını @script kısa direktifiyle ekleyin.
This article is currently available in Turkish. Its English translation is being prepared.
KUT'ta Wizard içine klasik <script> etiketi yazılmaz. Inline JavaScript, KUT'un etiket üretimi ve sıkıştırma katmanından geçirilir:
@Script::tag()->compress(
function()
{<
document.addEventListener('DOMContentLoaded', function () {
// Kodunuz
});
>}
)
Bu yöntem script etiketini üretir, yapılandırılmışsa CSP nonce değerini ekler ve gövdeyi sıkıştırır. Ayrı bir JavaScript parçası *.wizard.php dosyasında tutuluyorsa dosyanın kendi içeriği de aynı yapıyla çevrelenir; çağıran görünüm ikinci kez script etiketi açmaz.
CSP nonce sağlayıcısı
Kut\Hypertext\Script::nonceProvider(function()
{
return $uretilenNonce; // istek başına üretilen, tahmin edilemez değer
});
Script::nonceProvider() bir geri çağrı kaydeder. Script::tag()->compress() script etiketini üretirken geri çağrıyı çağırır ve dönen boş olmayan değeri HTML'e kaçışlayarak nonce="…" özniteliği olarak ekler. Kayıt yoksa ya da geri çağrı boş dize döndürürse etikete nonce eklenmez. Sağlayıcıyı uygulama başlangıcında bir kez kaydedin; null vermek kaydı kaldırır. OrunCP istek başına ürettiği CSP nonce değerini bu yolla verir. Aynı değeri Content-Security-Policy başlığında da kullanmanız gerekir.
Fiziksel .js dosyaları
Hazır veya derlenmiş bir .js dosyası inline olarak kopyalanmaz. Tema yolu, tam URL veya CDN anahtarı Wizard'ın belgelenmiş @script kısa direktifine verilir:
@script('assets/js/application.js')
@script($absoluteScriptUrl)
@script(...$jsFiles)
Wizard derleyicisi bu direktifi Import::script(...) çağrısına dönüştürür. Import katmanı dosyanın içeriğini sayfaya yazmaz; fiziksel kaynağı bir <script src="..."> etiketiyle yükler.
Güvenlik sözleşmesi
- Dinamik veriyi JavaScript'e metin birleştirerek değil
Json::encode()ile aktarın. onclick,onchangeve benzeri HTML olay öznitelikleri yerineaddEventListenerveya olay delegasyonu kullanın.- Kullanıcı verisini
innerHTMLiçine vermeyin; metin içintextContentkullanın.