2013-02-24 19 views
6

Testuję kod znaleziony podczas czytania książki. Otrzymuję ten błąd podczas testowania go w JS fiddle, document.write może być formą eval.Dlaczego otrzymuję ten błąd jsfiddle, document.write może być formą eval

 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(); 
} 

jestem coraz wyżej ostrzeżenie JSfiddle na obu liniach z document.writeln().

+2

[Dlaczego otrzymuję błąd "document.write może być formą eval"?] (Http://stackoverflow.com/questions/10609957/why-am-i-recieving-the-error-document- write-can-be-a-form-of-eval) –

+0

I więcej Q/A: [\ [javascript \] document.write eval] (http://stackoverflow.com/search?q= [javascript] + document .write + eval) –

Odpowiedz

14

Należy pamiętać, że jest to tylko ostrzeżenie - ale dobre, które należy uszanować. W rzeczywistości jest on generowany przez kontroler o nazwie JSLint - a poprawna lektura uzasadnienia tego ostrzeżenia jest dostępna pod adresem http://www.jameswiseman.com/blog/2011/03/31/jslint-messages-document-write-can-be-a-form-of-eval/.

Zasadniczo, podstawą jest to, że "eval is evil" - i że document.write może być używany do wykonywania ocen.

Poza tym - i nie wspomniano powyżej, należy unikać, jeśli to możliwe, document.write, z wyjątkiem może prostych testów. Piszę do DOM po tym, jak zostanie uznany za "kompletny", a modyfikacje w tym miejscu powinny być dokonywane tylko przy użyciu obsługiwanych metod DOM. Dodatkowe informacje na ten temat można znaleźć pod adresem Why is document.write considered a "bad practice"? - gdzie wspomniano, że "O wiele lepiej jest używać sejfu i przyjaznego DOM-u DOM manipulation methods" (document.createElement, element.appendChild itd.). Dobry konkretny przykład jest dostępny pod adresem https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Using_the_W3C_DOM_Level_1_Core.

+2

Każdy mówi, że to zło lub to nie jest dobre. Ale nikt nie mówi, że możesz użyć * what * zamiast 'document.write'. Jestem nowicjuszem w js, też spotkałem się z tym problemem. Nadal nie mam odpowiedzi, jak poprawić. –

+0

@ JW.ZG - jak już wspomniano, należy zamiast tego używać obsługiwanych metod DOM. Rozszerzyłem odpowiedź, dodając kilka dodatkowych szczegółów, w tym link do konkretnego konkretnego przykładu, z którym możesz się odwołać. – ziesemer

+0

Och, przepraszam, teraz rozumiem. Nie wiedziałem, że 'document.getElementById' nazywa się metodą DOM, która została faktycznie wprowadzona przez mojego Prof. w klasie.囧 –

Powiązane problemy