2013-02-24 26 views
6

Kitap okurken bulduğum bir kodu test ediyorum. Ben JS fiddle test ederken bu hatayı alıyorum, document.write bir değerlendirme formu olabilir.Neden bu jsfiddle hatasını alıyorum, document.write bir değerlendirme formu olabilir

 var text = '<html><body bgcolor=linen><p>' + 
    'This is <b>bold<\/b>!<\/p><\/body><\/html>'; 

var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g; 
var a, i; 
while ((a = tags.exec(text))) { 
    for (i = 0; i < a.length; i += 1) { 
     document.writeln(('// [' + i + '] ' + a[i]).entityify()); 
    } 
    document.writeln(); 
} 

Ben document.writeln() her iki hatlarında yukarıda JSfiddle uyarısı alıyorum.

+2

[Neden hata alıyorsunuz? Document.write bir değerlendirme biçimi olabilir?] (Http://stackoverflow.com/questions/10609957/why-am-i-recieving-the-error-document- Bir yazılabilir form-of-of-değerlendirme) –

+0

Ve daha fazlası Q/A: [\ [javascript \] document.write eval] (http://stackoverflow.com/search?q= [javascript] + document .write + eval) –

cevap

14

Bunun sadece bir uyarı olduğunu unutmayın - ancak bunlara uyulması gereken iyi bir şey. Aslında JSLint adında bir denetleyici tarafından üretiliyor - ve bu uyarının gerekçelendirilmesi için iyi bir okuma http://www.jameswiseman.com/blog/2011/03/31/jslint-messages-document-write-can-be-a-form-of-eval/ adresinde bulunabilir. Temel olarak, bunun temeli "eval is evil" - ve bu document.write değerlendirmeler gerçekleştirmek için kullanılabilir. Bunun yanında - ve daha önce de değinilmemişse, mümkün olduğunca basit testler hariç olmak üzere, document.write'dan kaçınılmalıdır. "Tam" olarak kabul edildikten sonra DOM'a yazar ve bu noktada değişiklikler yalnızca desteklenen DOM yöntemleri kullanılarak yapılmalıdır. Bununla ilgili ek ayrıntılar Why is document.write considered a "bad practice"? - "Güvenli ve DOM dostu DOM manipulation methods'u kullanmak için daha iyi" (, element.appendChild, vb.) Adresinden bahsedilmektedir. Bunun iyi bir somut örneği https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Using_the_W3C_DOM_Level_1_Core numaralı telefondan temin edilebilir.

+2

Her biri bunun kötülük olduğunu söylüyor ya da bu iyi değil. Ama kimse "document.write" yerine * ne * kullanabileceğinizi söylemez. Ben js için yeni, bu problemle de tanıştım. İyileştirmek için hala bir cevabım yok. –

+0

@ JW.ZG - belirtildiği gibi, desteklenen DOM yöntemlerini kullanmalısınız. Referansı, referans vermek isteyebileceğiniz iyi bir somut örneğe bağlantı da dahil olmak üzere bazı ek özelliklerle genişlettik. – ziesemer

+0

Oh, üzgünüm, şimdi anlıyorum. Ben bilmiyordum 'document.getElementById' sınıfta benim Profesör tarafından tanıtıldı hangi DOM yöntemi denir. 12 –

İlgili konular