ทำลายจาวาสคริปต์ก่อนการเปลี่ยนเส้นทางจาวาสคริปต์แบบอินไลน์ใน Chrome


94

ฉันกำลังดูหน้าที่มีการเปลี่ยนเส้นทางจาวาสคริปต์แบบอินไลน์ ( window.location = "/anotherpage") ฉันต้องการโหลดหน้าใน Chrome แต่ปิดใช้งานสายการเปลี่ยนเส้นทางดังนั้นฉันจึงสามารถใช้หน้านี้ได้โดยไม่ต้องเปลี่ยนเส้นทางไป

นี่คือสิ่งที่ฉันได้ลอง:

  • เครื่องมือสำหรับนักพัฒนา -> ฟันเฟือง -> ทั่วไป -> ปิดการใช้งาน JavaScript โหลดหน้านี้ มันไม่เปลี่ยนเส้นทาง (เย้!) แต่ฉันยังต้องการให้จาวาสคริปต์ส่วนที่เหลือของหน้าทำงาน แต่มันก็ไม่ได้

  • พิมพ์ URL จากนั้นคลิกเครื่องมือสำหรับนักพัฒนา -> แหล่งที่มา -> หยุดชั่วคราว (F8) เร็วจริง! มันยังไม่เปลี่ยนเส้นทาง (เย้!) ตอนนี้ฉันต้องการปิดการใช้งานเส้นเปลี่ยนเส้นทางก่อนที่จะยกเลิกการหยุดชั่วคราว แต่ส่วนนั้นยังไม่ได้โหลดลงในเครื่องมือสำหรับนักพัฒนา ฉันจะเริ่มค้นหาโค้ดจาวาสคริปต์ไฟล์อื่น ๆ จนกว่าจะไปถึงที่นั่น ?? แต่ทันทีที่ฉันก้าวออกจากจาวาสคริปต์ไฟล์อื่น ๆ มันก็จะเปลี่ยนเส้นทางไปทันที (ทำ!)

สามารถทำได้หรือไม่? ฉันคิดว่ามันน่าจะง่ายที่จะปิดการใช้งานบรรทัดของจาวาสคริปต์ แต่ฉันก็นิ่งงัน

คำตอบ:


144

เครื่องมือสำหรับนักพัฒนา -> แหล่งที่มา -> เบรกพอยต์ของ Listener เหตุการณ์ (บนแถบด้านข้างขวา) -> โหลด -> ตรวจสอบการยกเลิกการโหลด

สิ่งนี้จะทำให้ดีบักเกอร์หยุดทำงานในเหตุการณ์ยกเลิกการโหลดซึ่งถูกส่งไปก่อนการนำทาง


2
ขอบคุณอีกครั้งสำหรับคำตอบที่ใช้งานได้ ฉันสนใจที่จะทราบว่าเหตุใดจึงมีการโหวตเพิ่มจำนวนมากในข้อความ "สิ่งนี้ใช้ไม่ได้" นี่เป็นปัญหากับ Chrome เวอร์ชันเก่าหรือไม่ ใครบางคนที่ไม่ได้ผลให้ข้อมูลเพิ่มเติมได้หรือไม่?
Christian Rondeau

8
ตอนแรกฉันดีใจมากที่ได้เห็นคำตอบนี้ แต่ฉันสามารถยืนยันได้ว่ามันไม่ได้ผลสำหรับฉัน (แม้ว่าฉันจะตรวจสอบการยกเลิกการโหลดตามที่แนะนำแล้ว แต่การเปลี่ยนเส้นทางของหน้ายังคงเกิดขึ้นและฉันไม่มีโอกาสตั้งค่าเบรกพอยต์ในแหล่งที่มาของเพจ ก). อาจจะเกี่ยวข้องกับวิธีที่หน้าแรก "เปลี่ยนเส้นทาง"? ในกรณีของฉันหน้า A (หน้าที่มีจาวาสคริปต์ที่ฉันกำลังพยายามแก้ไขจุดบกพร่อง) ทำการ POST (ผ่านจาวาสคริปต์) ไปยังหน้า B
Emil G

17
มันใช้งานได้ดีปัญหาคือ call stack ว่างเปล่าดังนั้นจึงไม่เป็นประโยชน์มากนักเนื่องจากคุณจะไม่สามารถเห็นสิ่งที่ทำให้เกิดการเปลี่ยนเส้นทางจริง
Eugene Kuzmenko

8
@EugeneKuzmenko อย่างจริงจังฉันไม่รู้ว่านี่ช่วยใครได้จริง
จะพี

1
สิ่งนี้ใช้ได้เฉพาะเมื่อเพจมีตัวจัดการการยกเลิกการโหลดหรือก่อนการโหลดที่ดีบักเกอร์สามารถหยุด หากไม่มีการลงทะเบียนตัวจัดการดังกล่าวดีบักเกอร์จะไม่ทริกเกอร์
rumpel

43

ดำเนินการดังต่อไปนี้

  1. เปิดเครื่องมือสำหรับนักพัฒนา
  2. ไปที่แท็บSources
  3. มองหาจุดพักของผู้ฟังเหตุการณ์
  4. ขยายตัวเลือกการโหลด
  5. ตรวจสอบตัวเลือกยกเลิกการโหลดที่นี่

Chrome ยกเลิกการโหลดเบรกพอยต์


@TomBrito เมื่อก่อนหยุดพักการโหลด (ซึ่งฉันต้องใช้เพื่อหลบเลี่ยง paywall หนังสือพิมพ์โง่ ๆ ) ฉันสามารถตรวจสอบองค์ประกอบได้ คุณไม่สามารถตรวจสอบเมื่อยกเลิกการโหลดได้หรือไม่? ฉันใช้ Chrome 71.0.3578.98
linkD

12

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

ฉันพยายามใช้เมธอด "Event Listener Breakpoints" แต่ตามความคิดเห็นที่บอกว่าคุณไม่มีสแต็กแทร็กในการยกเลิกการโหลดเหตุการณ์จึงค่อนข้างไร้ประโยชน์

วิธีการแก้ปัญหาที่ได้ทำงานให้ฉัน: ฉันสร้างหน้าเว็บที่มีแท็ก iframe มีคุณลักษณะ Sandbox เช่น<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>และใส่เว็บไซต์ของฉันในนั้น ข้อผิดพลาดด้านความปลอดภัยนี้จะเกิดขึ้นภายใน chrome และคอนโซลจะแสดงตำแหน่งที่ JS พยายามเข้าถึงวัตถุตำแหน่ง คุณสามารถคลิกที่มันและดูรหัส ที่ดีที่สุดคือ Chrome มีตัวคลายการบีบอัด JS (ปุ่ม {} ที่ด้านล่างซ้ายของหน้าต่างต้นทาง) ซึ่งฉลาดมากสามารถแสดงบรรทัดได้แม้หลังจากพิมพ์เสร็จแล้วดังนั้นคุณจึงสามารถดูได้แม้ใน JS ที่บีบอัด

ข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัติ sandbox: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox


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