2012-02-17 12 views
6

Biorąc other questions na tym samym temacie czuję zrozumieć pozorne uzasadnienie złączenie tag <script> jak '<scr'+'ipt..' w ciąg JavaScript, nawet jeśli ten sam w sobie jest misguided.Powiązanie „SCR” + „IPT” w javascript bookmarklet kod

Jednak patrząc na kod Instapaper bookmarklet widzę d.createElement('scr' + 'ipt'). Odpowiednia część kodu (upiększona) znajduje się na końcu pytania.

Nawet jeśli ten (anty) wzorzec ma na celu uniknięcie parowania HTML w znacznikach po wystąpieniu zamykającego tagu <script> w ciągu javascript, widzę jeszcze mniej usprawiedliwienia dla robienia tego tutaj, biorąc pod uwagę, że połączony tekst ma nawet nie oznacza znacznika <script>.

Czy w tym przypadku robi się to z innego powodu?

javascript: function iprl5() { 
    var d = document, 
     z = d.createElement('scr' + 'ipt'), //??? 
     b = d.body, 
     l = d.location; 
+3

Ktoś spał w tym czasie. –

+6

Myślę, że jest to po prostu dogmatyczna aplikacja wzoru bez zrozumienia, dlaczego tak się stało. '' var test = document.createElement ('script'); '' nie atakuje mnie (i nie oczekiwałbym tego). –

Odpowiedz

5

To głupie uciec "<script>" gdyż niebyć analizowany jako tag wewnątrz bloku skryptu * i to nawet głupsze traktować "script" jako specjalnego. To nie jest. Brakuje jej albo < lub </, bez której nigdy nie będzie parsowany jako znacznik - w dowolnym kontekście. Tak więc f("script") i f("scr"+"ipt") mają identyczne semantyki.

Technicznie w HTML, wszystko</ w bloku skryptu muszą być chronione przed, ale w praktyce przeglądarek tylko dbają o </script>. Z tego powodu polecam "<"+"/script>", ale dotyczy to tylko tagów zamykających. To znaczy, "<script>" (lub "script", w zależności od przypadku) jest całkowicie poprawne w bloku skryptu.

Szczęśliwe kodowanie.


* Przez zgodnej HTML parser: jednak ręcznie zwijane (regex) parsowanie może eksplodować w strasznych sposobów. Reguły XML/XHTML są różne, ale kodowanie < musi być zakodowane, aby być dobrze uformowanym... być może jakieś niejasności z CDATA? W każdym razie nie ma to znaczenia dla HTML.

Również związane odpowiedzi nie argumentować za "<scr"+"ipt.." (lub podzbiory jak "scr"+"ipt"): zamiast, twierdzą oni za ochronę przeciwko zamknięcia script-tag konstruktem, który rozpoczyna się z </, że nie jest jeszcze obecny w kod w poście ...

+1

Mam nawyk łamania moich tagów '' Umbrella

+0

@Umbrella Bardzo ważny punkt; [czasami smutne] narzędzia programistyczne dyktują szereg konwencji. –

+0

Dla Twojej referencji http://www.w3.org/TR/html4/types.html#type-cdata –

3

nr

myślę.

Oczekuję, że zrobi to ktoś, kto został spalony przez '</script>' i jest zbyt opiekuńczy.

Powiązane problemy