คุณต้องการข้อความ / จาวาสคริปต์ที่ระบุในแท็ก <script> ของคุณหรือไม่?


157

ฉันอ่านบางที่ที่คุณไม่ต้องการสิ่งที่ต้องการtype="text/javascript"และแปลกCDATAและ<!--สิ่งต่าง ๆ ในแท็กสคริปต์ของคุณ ดังนั้นแทนที่จะ:

<script type="text/javascript">
//<![CDATA[
<!--

    //your script here

-->
//]]>
</script>

คุณเพิ่งจะทำ:

<script>
    //your script here
</script>

ฉันจำไม่ได้ว่าอ่านตรงไหน มันมาจากวิศวกร Google หรือ Yahoo ที่ฉันคิดว่าพวกเขากล่าวถึงเฉพาะว่าเบราว์เซอร์ใดต้องการโครงสร้างที่เก่าแก่เหล่านี้และทำไม ใครรู้ว่าโพสต์บล็อก / บทความนี้ถูกพูดถึงหรือมีทรัพยากรที่ดีพูดคุยเกี่ยวกับเรื่องนี้?


สำหรับเบราว์เซอร์ใหม่ แต่จำเป็นต้องใช้รุ่นเก่า (หากยังคงมีอยู่) <! - -> จำเป็นต้องมี เกี่ยวกับประเภทในแอพบางตัวหากไม่ได้เว้นไว้จะต้องใช้แอพที่เหมาะสม
บากู

1
อ่านเกี่ยวกับ CDATA ได้ดี: stackoverflow.com/questions/66837/…
kapa

1
ทุกครั้งที่ฉันเปิดไฟล์ที่มีการtext/javascriptระบุฉันจะลบออก มันเป็นเสียงรบกวน
มัฟฟินแมน

โพสต์ที่เกี่ยวข้องมากที่นี่มีข้อมูลที่ทันสมัยเกี่ยวกับหลักเกณฑ์ HTML5 ในคำตอบที่ยอมรับ
RBT

คำตอบ:


135

ดูบทความของ Crockford บน<script>แท็กโดยเฉพาะอย่างยิ่ง:

อย่าใช้<!-- //-->แฮ็คกับสคริปต์ มีวัตถุประสงค์เพื่อป้องกันไม่ให้สคริปต์แสดงเป็นข้อความบนเบราว์เซอร์รุ่นแรก Netscape 1 และ Mosaic มันไม่จำเป็นสำหรับหลายปี <!-- //-->ควรจะส่งสัญญาณความคิดเห็น HTML ความคิดเห็นควรละเว้นไม่ได้รวบรวมและดำเนินการ นอกจากนี้ความคิดเห็น HTML จะไม่รวม--ดังนั้นสคริปต์ที่มีการลดลงมีข้อผิดพลาด HTML

...

type="text/javascript"

คุณลักษณะนี้เป็นทางเลือก ตั้งแต่ Netscape 2 ภาษาการเขียนโปรแกรมเริ่มต้นในเบราว์เซอร์ทั้งหมดเป็น JavaScript ใน XHTML คุณลักษณะนี้จำเป็นและไม่จำเป็น ใน HTML ควรปล่อยทิ้งไว้ เบราว์เซอร์รู้ว่าต้องทำอะไร


75
จำเป็นและไม่จำเป็น? ฉันพลาดอะไรไปรึเปล่า?
Izkata

17
@Izkata จำเป็นต้องมีการตรวจสอบความถูกต้อง แต่ไม่มีผลใด ๆ
bdukes

14
"เบราว์เซอร์รู้ว่าต้องทำอะไร" ... ตอนนี้ แล้วสัปดาห์หน้าเมื่อ RubyScript (ฉันทำสิ่งนี้เป็นตัวอย่าง) จะได้รับความนิยมและทุกคนต่างก็อยากที่จะยอมรับมัน นี่เป็นความคิดแบบสายตาสั้นที่ทำให้คนตั้งชื่อไฟล์ "_new" และสร้างความสับสนให้กับคนอื่นมานานหลายปี เป็น "_new" หรือไม่ หรือ "_new_new" หรือ "_newer" IMO มันเป็นสายตาสั้น
Slobaum

18
@Slobaum, HTML5 ข้อมูลจำเพาะของรัฐว่ามันเริ่มต้นที่ JavaScript หากมีประเภทสคริปต์ใหม่จะมีการใช้งานในเบราว์เซอร์เวอร์ชันใหม่ที่รองรับค่าเริ่มต้นจากสเป็คเท่านั้น
bdukes

8
หากได้RubyScriptรับความนิยมมันจะสิ้นสุดลง.rbscriptและเบราว์เซอร์จะทำงานตามนั้น
Kirk Strobeck

45

มันเป็นคำแนะนำของCrockford ฉันรู้ว่าฉันเห็นมันสะท้อนที่อื่น (ppk อาจจะ?) สเป็ค HTML5 ไม่จำเป็นต้องใช้

ผิดปกติก็กลายเป็นส่วนหนึ่งau Courantใช้แอตทริบิวต์ "พิมพ์" เพื่อทำเครื่องหมาย<script>บล็อกที่คุณไม่ต้องการที่จะได้รับการประเมิน:

<script type='text/html-template'>
  <div> this is a template </div>
</script>

ด้วยการให้ประเภทที่ไม่ใช่ JavaScript แปลก ๆ คุณจะได้รับวิธีการใส่ข้อความดิบลงในหน้าเพื่อใช้งานโดยรหัส JavaScript อื่น ๆ (ซึ่งน่าจะเป็นบล็อกสคริปต์ที่สามารถประเมินได้)


ฉันไม่สามารถเข้าใจได้อย่างเต็มที่ โปรดอธิบายสิ่งที่ไม่ได้type="text/html"หมายความว่าอะไรและสิ่งที่text/javascriptหมายความว่า .. ขอบคุณ
T.Todua

4
@tazotodua มันไม่สำคัญจริง ๆ ว่า "text / html" หมายถึงอะไร สิ่งที่สำคัญคือไม่ใช่ "text / javascript" เบราว์เซอร์จะไม่สนใจเนื้อหาของ<script>บล็อก อย่างไรก็ตาม<script> จะกลายเป็นส่วนหนึ่งของ DOM ดังนั้นโค้ด JavaScript อื่น ๆ จึงสามารถค้นหาและแยกเนื้อหาได้
Pointy

นั่นเป็นแฮ็คที่น่าสนใจ ไม่แน่ใจว่าฉันจะใช้มันเพื่ออะไร
brennanyoung

2
w3schools : In HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Amin Soheyli

19

HTML5 ไม่ต้องการ type="text/javascript" (เป็นค่าเริ่มต้น)

CDATA ใช้สำหรับหน้า XHTML เท่านั้นหากสคริปต์มีอักขระ HTML ใด ๆ (เช่น '<' และ '>')

<!-- ควรจะจำเป็นสำหรับเบราว์เซอร์ OLD เท่านั้น


3

ดีฉันอยากจะบอกว่าไม่มีใครใช้text/javascriptอีกแล้วและแม้แต่เครื่องมือการลดขนาดอาจจะลบมัน ... จริง ๆ แล้วเอกสาร SDK ของ Facebookระบุเพียง<script>ระบุเพียง

อย่างไรก็ตาม เอกสารของ Google SDKยังคงมีtext/javascriptอยู่

เอกสารของ Amazon SDKยังคงมีtext/javascriptอยู่

เอกสาร Linkedin APItext/javascriptยังคงมี

Instagramยังคงใช้งานtext/javascriptอยู่


3

ประเภทแอตทริบิวต์ระบุภาษาสคริปต์ของรหัสที่ฝังอยู่ภายในองค์ประกอบสคริปต์หรืออ้างอิงผ่านคุณลักษณะ src องค์ประกอบของ สิ่งนี้ถูกระบุเป็นชนิด MIME ตัวอย่างประเภท MIME ที่รองรับ ได้แก่ text / javascript, text / ecmascript, application / javascript และ application / ecmascript

ตามข้อกำหนดของ HTML 4.01

ประเภทแอตทริบิวต์ระบุภาษาสคริปต์ของเนื้อหาองค์ประกอบและแทนที่ภาษาสคริปต์เริ่มต้น ภาษาสคริปต์ถูกระบุเป็นประเภทเนื้อหา (เช่น "text / javascript") ผู้เขียนต้องระบุค่าสำหรับแอตทริบิวต์นี้ ไม่มีค่าเริ่มต้นสำหรับคุณลักษณะนี้

แต่ในHTML5 text/javascriptเป็นประเภทเริ่มต้นดังนั้นคุณสามารถละเว้นได้

ประเภทแอตทริบิวต์ให้ภาษาของสคริปต์หรือรูปแบบของข้อมูลที่ หากมีแอตทริบิวต์นี้ค่าของมันจะต้องเป็นชนิด MIME ที่ถูกต้อง ต้องไม่ระบุพารามิเตอร์ charset ค่าเริ่มต้นซึ่งใช้หากไม่มีแอตทริบิวต์คือ "text / javascript"


1
กล่าวอีกนัยหนึ่งคือการละเว้นอาจทำให้เกิดข้อผิดพลาดในเบราว์เซอร์เก่าที่ไม่สนับสนุน HTML5
Serge

2

คุณอาจคิดถึงบทความนี้ที่นี่โดยอ้างอิงว่าสคริปต์เริ่มต้นที่ text / javascript ใน HTML5 โดยอัตโนมัติในขณะที่เบราว์เซอร์ที่ไม่ใช่ HTML5 ยังคงคาดหวังว่าคุณจะกำหนดประเภทเฉพาะเจาะจงแม้ว่าพวกเขาจะคาดเดาข้อความ / javascript เกือบทุกครั้ง .


1

มันขึ้นอยู่กับเบราว์เซอร์ในการตีความscriptบล็อกอย่างถูกต้องตามส่วนหัวฉันเชื่อว่าไม่ใช่typeแอตทริบิวต์ ดังนั้นเพื่อตอบคำถามของคุณไม่จำเป็นสำหรับเบราว์เซอร์สมัยใหม่ (ฉันกำลังพูดถึง IE7 +, FF, Webkit) หากคุณรองรับเบราว์เซอร์รุ่นเก่ากว่านั้น ... ฉันรู้สึกเสียใจกับคุณ =)


2
อย่าลืมประเทศจีนที่มีผู้ใช้มากกว่า 385 ล้านคนซึ่งหลายคนยังใช้ IE6 อยู่ netmarketshare.com/…
chainwork

3
เมื่อทราบนโยบายอินเทอร์เน็ตที่เข้มงวดของจีนโอกาสที่เว็บไซต์ของคุณจะไม่สามารถเข้าถึงได้ = P
hellatan

คำถามเกี่ยวกับสคริปต์แบบอินไลน์ดังนั้นจึงไม่มีส่วนหัวอื่นนอกเหนือจากหน้าหลัก (ซึ่งจะเป็นเนื้อหาประเภท HTML บางส่วน) อย่างไรก็ตามคุณมีแหล่งที่มาที่ระบุว่าเบราว์เซอร์คำนึงถึงส่วนหัว (เช่นถ้าคุณมี <script src = "some"> </script> ธรรมดาและให้บริการส่วนหัว VBScript จะมีเบราว์เซอร์ใดที่จะตีความว่าเป็น VBScript) ?
Matthew Flaschen

1

หากคุณวางแท็กสคริปต์ไว้ใน SVGคุณต้องระบุแอตทริบิวต์ type และมันควรจะมากกว่า"text/ecmascript""text/javascript"

หากสคริปต์ของคุณเป็นแบบอินไลน์ (ไม่ได้เชื่อมโยง) คุณจะต้องล้อมเนื้อหาสคริปต์ในการประกาศ CDATA ด้วย ดังนั้นแผ่นข้อมูลสคริปต์แบบอินไลน์สำหรับSVG (และตัวแปร XML อื่น ๆ ) จึงเป็นเช่นนั้น

<script type="text/ecmascript">
<![CDATA[
// your javascript code goes here
]]>
</script>

สิ่งเหล่านี้อาจเป็นกรณีพิเศษ 'in wild' แต่แท้จริงแล้วเพียงพอและการใช้ SVG กำลังเพิ่มขึ้นดังนั้นจึงไม่ถูกต้องที่คนอื่นจะแนะนำว่าแอตทริบิวต์ type และ CDATA ล้าสมัยไปแล้วในเบราว์เซอร์สมัยใหม่ กรณีการใช้งานแคบใช่ แต่ไม่เคยได้ยินมาก่อน

“ เปลี่ยนสภาพแวดล้อมให้เป็นสิ่งตรงกันข้ามและปัญญาทุกอย่างกลายเป็นความโง่ที่สุด” - แอชบี


1
โทรดีมาก เพิ่งได้ทำงานกับ SVG ที่ซับซ้อนและนี่ก็เป็นกรณีนี้!
Dave Everitt

1

specification ข้อกำหนด HTML5 เรียกร้องให้ผู้เขียนละเว้นแอตทริบิวต์แทนที่จะระบุประเภท MIME ที่ซ้ำซ้อน MDN

MIME ดมกลิ่นมาตรฐานช่วยให้ JavaScript ให้บริการโดยใช้ชนิดไมม์ใด ๆ ( Multipurpose Internet Mail Extensions ) ที่ตรงกับต่อไปนี้:

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>

0

ฉันเห็นตัวอย่างเพิ่มเติมโดยไม่มีข้อความ / javascript แต่ด้วยเหตุผลบางอย่างสคริปต์ของฉันจะไม่ทำงานใน FF เมื่อฉันทำเช่นนั้น ฉันอยากจะแนะนำให้รักษาข้อความ / ประกาศจาวาสคริปต์ แท็ก CDATA ป้องกันไม่ให้จาวาสคริปต์แสดงเป็นข้อความธรรมดาในเว็บไซต์ของคุณหากเบราว์เซอร์ของคุณปิดจาวาสคริปต์ โดยส่วนตัวแล้วฉันไม่ได้ใช้แท็กเหล่านั้นอีกต่อไปไม่คิดว่าจะมีผู้ใช้จำนวนมากออกไปข้างนอกหากไม่มีและหากพวกเขาอยู่ที่นั่นพวกเขาอาจต้องการปลูกสมองบางส่วน: P


แอตทริบิวต์ type หรือสิ่ง CDATA เก่านั้นไม่จำเป็นเว้นแต่คุณจะต้องการกำหนดเป้าหมายเบราว์เซอร์โบราณอย่างแท้จริง พวกเขาไม่ควรทำร้ายอะไรเลยตราบใดที่คุณใช้ประเภทที่ถูกต้อง
Pointy

ฉันใช้การปล่อย FF ที่เสถียรล่าสุดและดูเหมือนว่าจะมีปัญหาในการแยกวิเคราะห์โดยไม่ต้องประกาศข้อความ / javascript ฉันใช้ jQuery btw แต่ไม่ควรสร้างความแตกต่าง
Michael

ฉันใช้งานเว็บแอปพลิเคชั่นทั้งหมดด้วยแท็กสคริปต์ที่เรียบง่าย<script>ไม่มี "ภาษา" และไม่มี "ประเภท" และมันใช้ได้ดีกับเบราว์เซอร์ทั้งหมด (คนที่เหมาะสมทั้งหมด: FF, Chrome, Safari, IE, Opera)
Pointy

1
@pointy ดูเหมือนว่า FatherStorm เพิ่งโพสต์คำตอบว่าทำไมสิ่งนี้ถึงเกิดขึ้น ดังนั้นความคิดเห็นของคุณดูเหมือนจะไม่ถูกต้อง
Michael

@Michael อาจเป็นกรณีที่ถ้าคุณทำผิดพลาดกับ XHTML / Strict คุณอาจมีปัญหา แต่ถึงอย่างนั้นฉันก็ยังสงสัยอยู่ มีข้อตกลงทั่วไปในหมู่ผู้ทรงคุณวุฒิของโลก JavaScript ว่าคุณลักษณะ "type" นั้นไม่จำเป็นและในความเป็นจริงเนื่องจาก "ประเภท" ที่ไม่ดีจะทำลายสคริปต์มันเป็นเพียงแหล่งที่มาของข้อบกพร่อง
Pointy

0

type="text/javascript" : จำเป็นใน HTML 4 และ XHTML แต่เป็นตัวเลือกใน HTML5

CDATA : จำเป็นใน XHTML

<!--: ใช้เพื่อซ่อน JavaScript จากเบราว์เซอร์ที่เก่ามาก เช่น Netscape 1 และ Internet Explorer 2 ไม่มีใครใช้อีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.