ตัวอย่างจากปุ่ม +1 ของ Googles:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
แท็กสคริปต์มี src-Attribute และเนื้อหา นี่หมายความว่าอย่างไรและทำงานอย่างไร?
ตัวอย่างจากปุ่ม +1 ของ Googles:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
แท็กสคริปต์มี src-Attribute และเนื้อหา นี่หมายความว่าอย่างไรและทำงานอย่างไร?
คำตอบ:
เบราว์เซอร์ที่แตกต่างกันจะปฏิบัติแตกต่างกัน บางคนเรียกใช้เนื้อหาก็ต่อเมื่อsrcรวมอยู่โดยไม่มีข้อผิดพลาด บางคนเรียกใช้หลังจากพยายามรวมsrcสคริปต์โดยไม่คำนึงถึงความสำเร็จ เนื่องจากพฤติกรรมนี้ไม่น่าเชื่อถือ (และห้ามใช้ใน HTML5 ) จึงควรหลีกเลี่ยง
Google ไม่ได้อาศัยพฤติกรรมเฉพาะใด ๆ เนื่องจากเนื้อหาเป็นเพียงอ็อบเจกต์ลิเทอรัล (ค่า) การเรียกใช้งานจะไม่ทำอะไรเลยนอกจากทำให้เกิดข้อผิดพลาดแบบไม่โต้ตอบ โค้ดของ Google จะดูที่เนื้อหาของscriptแท็กและปรับพฤติกรรมตามนั้น
srcแอตทริบิวต์อยู่และจริงๆแล้วไม่ใช่ออบเจ็กต์ลิเทอรัลรหัสนั้นจะสร้างSyntaxErrorif ดำเนินการเป็นเพียง "ข้อความ JSON" ที่สคริปต์จะใช้ ด้วยตัวมันเองในภายหลัง
s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML; ฉันไม่คิดว่าจะมีวิธีใดในการดึงเนื้อหาของโหนดสคริปต์ที่ไม่เกี่ยวข้องกับการสัมผัส DOM .
หากองค์ประกอบสคริปต์มีแอตทริบิวต์srcเนื้อหาจะต้องถูกละเว้นพฤติกรรมอื่น ๆ จะไม่เป็นไปตามข้อกำหนด
มันได้รับการแนะนำในบล็อก (เป็นสับ) ที่จะนำเนื้อหาในองค์ประกอบรู้ว่ามันจะไม่ได้รับการประเมินแล้วใช้วิธีการ DOM จะได้รับเนื้อหาเป็นสตริงและทั้งevalหรือใส่ในองค์ประกอบสคริปต์ใหม่ สิ่งเหล่านี้ไม่ใช่ความคิดที่ดี
ตามที่ร่างข้อกำหนด HTML5 , <script>องค์ประกอบที่มีsrcคุณลักษณะที่ควรมีความเห็นออกรหัสซึ่งมีวัตถุประสงค์เพื่อให้เอกสารสำหรับสคริปต์ ดูเหมือนว่า Google จะไม่เป็นไปตามข้อกำหนดนี้
หลังจากโหลดสคริปต์แล้วจะดูภายในแท็กสคริปต์ของตนเองเพื่อเข้าถึงเนื้อหา
มันจะใช้รหัสบางอย่างที่คล้ายกับสิ่งนี้:
var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);