script-Tag ที่มีเนื้อหา src AND หมายความว่าอย่างไร


122

ตัวอย่างจากปุ่ม +1 ของ Googles:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
      {"parsetags": "explicit"}
</script>

แท็กสคริปต์มี src-Attribute และเนื้อหา นี่หมายความว่าอย่างไรและทำงานอย่างไร?


Firebug Lite ใช้วิธีนี้: getfirebug.com/firebuglite
Brad

คำตอบ:


71

เบราว์เซอร์ที่แตกต่างกันจะปฏิบัติแตกต่างกัน บางคนเรียกใช้เนื้อหาก็ต่อเมื่อsrcรวมอยู่โดยไม่มีข้อผิดพลาด บางคนเรียกใช้หลังจากพยายามรวมsrcสคริปต์โดยไม่คำนึงถึงความสำเร็จ เนื่องจากพฤติกรรมนี้ไม่น่าเชื่อถือ (และห้ามใช้ใน HTML5 ) จึงควรหลีกเลี่ยง

Google ไม่ได้อาศัยพฤติกรรมเฉพาะใด ๆ เนื่องจากเนื้อหาเป็นเพียงอ็อบเจกต์ลิเทอรัล (ค่า) การเรียกใช้งานจะไม่ทำอะไรเลยนอกจากทำให้เกิดข้อผิดพลาดแบบไม่โต้ตอบ โค้ดของ Google จะดูที่เนื้อหาของscriptแท็กและปรับพฤติกรรมตามนั้น


2
มีวิธีที่ชาญฉลาดกว่าสำหรับสคริปต์ในการดูเนื้อหาของแท็กสคริปต์ของตัวเอง (โดยเฉพาะ) มากกว่าการใช้ DOM หรือไม่?
Karl Knechtel

11
บนเบราว์เซอร์ทั้งหมดที่ฉันเคยใช้งานเนื้อหาสคริปต์จะไม่ถูกเรียกใช้งานหากมีsrcแอตทริบิวต์อยู่และจริงๆแล้วไม่ใช่ออบเจ็กต์ลิเทอรัลรหัสนั้นจะสร้างSyntaxErrorif ดำเนินการเป็นเพียง "ข้อความ JSON" ที่สคริปต์จะใช้ ด้วยตัวมันเองในภายหลัง
CMS

2
@Karl ที่ใช้ภายในไฟล์. js ภายนอกสิ่งนี้จะให้เนื้อหาของโหนด <script> ที่กำลังดำเนินการอยู่: s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML; ฉันไม่คิดว่าจะมีวิธีใดในการดึงเนื้อหาของโหนดสคริปต์ที่ไม่เกี่ยวข้องกับการสัมผัส DOM .
digitalbath

@CMS ใช้ได้กับทุกเบราว์เซอร์ยกเว้น IE คุณสามารถดูได้ที่นี่
Jose Faeti

1
@jose - ตัวอย่างของคุณไม่ใช่สิ่งที่ CMS อ้างถึง ถ้าโค้ดถูกรันเป็นคำสั่งแบบสแตนด์อะโลนแสดงว่าเป็นข้อผิดพลาดทางไวยากรณ์ ตัวอย่างของคุณ (และของ Google) "ใช้งานได้" เท่านั้นเนื่องจากเนื้อหาขององค์ประกอบสคริปต์ถูกยึดเข้าไปเนื่องจากแอตทริบิวต์src
RobG

23

หากองค์ประกอบสคริปต์มีแอตทริบิวต์srcเนื้อหาจะต้องถูกละเว้นพฤติกรรมอื่น ๆ จะไม่เป็นไปตามข้อกำหนด

มันได้รับการแนะนำในบล็อก (เป็นสับ) ที่จะนำเนื้อหาในองค์ประกอบรู้ว่ามันจะไม่ได้รับการประเมินแล้วใช้วิธีการ DOM จะได้รับเนื้อหาเป็นสตริงและทั้งevalหรือใส่ในองค์ประกอบสคริปต์ใหม่ สิ่งเหล่านี้ไม่ใช่ความคิดที่ดี


4
เหตุใดจึงไม่เป็นความคิดที่ดี จะเกิดอะไรขึ้นหากใช้เพื่อเริ่มต้นปลั๊กอินของบุคคลที่สาม
thekingoftruth

13

ตามที่ร่างข้อกำหนด HTML5 , <script>องค์ประกอบที่มีsrcคุณลักษณะที่ควรมีความเห็นออกรหัสซึ่งมีวัตถุประสงค์เพื่อให้เอกสารสำหรับสคริปต์ ดูเหมือนว่า Google จะไม่เป็นไปตามข้อกำหนดนี้


13

หลังจากโหลดสคริปต์แล้วจะดูภายในแท็กสคริปต์ของตนเองเพื่อเข้าถึงเนื้อหา

มันจะใช้รหัสบางอย่างที่คล้ายกับสิ่งนี้:

var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);

มารยาทของจอห์นเรซิก

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