เหตุใดเบราว์เซอร์จึงไม่เกิดข้อผิดพลาดเมื่อมีการใช้คำอื่นแทน 'javascript' ในค่าของ onclick


100

ฉันได้รับเว็บไซต์มาและเพิ่งเจอความอยากรู้อยากเห็นนี้:

<a href="/delete"  onClick="jamoscript:return confirm('Do you really want to do that?');">Delete all</a>

ฉันสามารถแสดงหน้าที่มีมันและคลิกที่ลิงค์เพื่อรับกล่องโต้ตอบการยืนยันเหมือนกับที่ฉันทำเมื่อฉันเปลี่ยน " jamoscript" เป็น " javascript" ไม่มีการวินิจฉัยแสดงในคอนโซล Firebug ไม่ว่าจะเมื่อโหลดเพจหรือเมื่อคลิกลิงก์ อะไรกัน? Googling สำหรับ jamoscript ไม่ได้มีอะไรน่าสนใจ

ใครสามารถอธิบายพฤติกรรมนี้ได้บ้าง?

คำตอบ:


144

ค่าสตริงของแอตทริบิวต์ "onclick" ถูกนำมาใช้เป็นโค้ด JavaScript แบบธรรมดา JavaScript มีข้อกำหนดสำหรับข้อความที่มีป้ายกำกับดังนั้นโค้ดจึงเป็นreturnคำสั่งที่มีป้ายกำกับ "jamoscript" กล่าวอีกนัยหนึ่งสิ่งนี้:

jamoscript: return confirm("Do you really want to hurt me?");

เป็น JavaScript ที่ถูกกฎหมายอย่างสมบูรณ์ มีการใช้ป้ายกำกับไม่มากนักจึงไม่คุ้นเคย

บริบทเดียวที่คำนำหน้า "javascript:" มีความสำคัญคือเมื่อคาดหวัง URL เช่นเดียวกับกรณีที่มีแอตทริบิวต์ "href" ของ<a>แท็ก


53
คำถามนี้ทำให้ฉันอยากให้ภาษานี้เรียกว่า "JamoScript" จริงๆ
Pointy

5
function foo(a) { x: 2 }นี้ทำให้ผมนึกถึงปัญหาที่มีชื่อเสียงของสิ่งต่อไปนี้ไม่:

80
ฉันสร้างบัญชีที่นี่เพื่อบอกคุณว่าโค้ดบรรทัดนี้ (? - ฉันไม่ใช่โปรแกรมเมอร์) ไม่ต้องสงสัยเลยว่าเขียนโดยชาวกรีกหรืออย่างน้อยก็ "jamoscirpt" ถูกเสนอโดยชาวกรีก "Jamo" เป็นวิธีที่คนเราจะพยายามใช้เสียงของตัวอักษรภาษาอังกฤษเพื่อสร้างเสียงที่คำว่า "f --- ing" มีในภาษากรีก ดังนั้นถ้าคุณพยายามอ่านออกเสียง "jamoscript" คนกรีกที่รู้จักคำว่า "script" จะเข้าใจ "f --- ing script" เอฟเฟกต์ที่ตั้งใจไว้จะมีความแน่นอนมากขึ้นหากใช้ตัวอักษร "g" แทน "j" แต่ฉันเดาว่ามีเจตนาเล่นกับ "j-ava"
Alecos Papadopoulos

6
@AlecosPapadopoulos ว้าวสุดยอดมาก ถ้ามีอะไรทำให้ฉันอยากได้มากขึ้นไปอีกว่าภาษานี้เรียกว่า "JamoScript" :)
Pointy

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