มีวิธีเปลี่ยนบริบทเป็น iframe ในคอนโซลจาวาสคริปต์หรือไม่


107

ฉันต้องการเปลี่ยนบริบทของ javascript ที่เรียกใช้ในคอนโซลเครื่องมือสำหรับนักพัฒนาเว็บ / firebug เพื่อเรียกใช้โค้ดเหมือนทำงานจากภายใน iframe บนหน้า

ฉันรู้ว่าฉันทำได้โดยการเปิดเพจใน iframe บนเพจแยกต่างหาก แต่ฉันต้องการเรียกใช้โค้ดที่มันโต้ตอบกับเฟรมหลัก


1
คุณสามารถรันโค้ดในwindow.frames[x]แฟชั่น เพียงต่อท้ายคำสั่งที่คุณต้องการ IEwindow.frames[0].runFunction()
LoveAndCoding

1
@Ktash คุณอยากจะให้คำตอบนั้นหรือไม่?
Muhd

ฉันจะทำเช่นเดียวกันใน IE ได้อย่างไร ฉันพบว่ามันยากมากที่จะเลือกองค์ประกอบในหน้าต่างคอนโซลโดยใช้ $ หากองค์ประกอบนั้นอยู่ใน IFRAME ภายใน กรุณาช่วย.
tarekahf

คำตอบ:


149

Chrome 15 ช่วยให้คุณเปลี่ยนขอบเขตของคอนโซลได้ ที่ด้านล่างของคอนโซลถัดจากปุ่มล้างคอนโซลมีเมนูที่ระบุว่า<top frame>จะให้รายการเฟรมที่ใช้ได้:

ใส่คำอธิบายภาพที่นี่

Firefox มีคุณลักษณะที่คล้ายกันอยู่ระหว่างการพัฒนา:

ใส่คำอธิบายภาพที่นี่


คุณยังสามารถนำทางข้ามเฟรมโดยใช้บรรทัดคำสั่ง :

var frame = document.getElementById("frame1").contentWindow;
cd(frame);

6
ฉันสามารถรันโค้ดในคอนโซลเพื่อทำสิ่งเดียวกันนี้ให้สำเร็จได้หรือไม่หรือฉันต้องคลิกตัวเลือกเฟรม
bodine

@bodine - คุณพบวิธีที่จะทำให้สำเร็จจากคำสั่งคอนโซลหรือไม่?
arty

1
โปรดทราบว่าตอนนี้ดรอปดาวน์นี้อยู่ที่ด้านบนสุดของคอนโซลแทนที่จะเป็นด้านล่าง
Muhd

1
ฉันไม่เห็นสิ่งนี้ใน Chrome 38 ฉันไม่สามารถหาวิธีดำเนินการใน Chrome ได้อย่างรวดเร็ว ใช้ cd (frames [<index number>]) ใน Firefox แทน
Akrikos

1
ช่างน่าเสียดาย จะไม่คงกรอบที่เลือกไว้หากเนื้อหาของเฟรมมีการเปลี่ยนแปลง เปลี่ยนกลับเป็น "เฟรมด้านบน"
bryc

22

คุณสามารถรันโค้ดใน<iframe>s ได้โดยใช้window.frames[x]ฟังก์ชัน ตัวอย่างเช่น,

window.frames[0].runFunction()

ทางเลือกที่ดีหาก FireBug เป็นอาวุธที่คุณเลือก ขอบคุณ.
Surreal Dreams

1
คุณจะรันโค้ดนอกฟังก์ชันเช่นคำสั่ง jQuery ได้อย่างไร หรือถ้าคุณต้องการได้รับการอ้างอิงถึงองค์ประกอบ DOM ภายใต้บางเฟรมให้รันโค้ดกับองค์ประกอบนั้น?
เดวิด

ดังตัวอย่างจะเป็น:window.frames[0].alert()
Shayan

6

ใน Chrome ในปัจจุบัน (เวอร์ชัน 52) สิ่งที่คุณต้องทำคือเลือก iframe ในแท็บ "Elements" ของเครื่องมือ dev ทุกสิ่งที่คุณเรียกใช้ในคอนโซล JS จะทำงานโดยอัตโนมัติในบริบทของ iframe ที่เลือก

ตัวอย่างเช่นที่นี่ฉันได้เลือก iframe และเมื่อฉันพิมพ์document.location.pathnameลงในคอนโซลมันจะส่งกลับแอตทริบิวต์ src ของ iframe แทน URL จากแถบที่อยู่:

ใส่คำอธิบายภาพที่นี่


4

สำหรับวิธีแก้ปัญหา firebug ดูคำตอบนี้สำหรับคำถาม SO อื่น ไม่ทำงานข้ามโดเมนเช่นโซลูชัน Chrome ของ Dennis อย่างไรก็ตาม

แก้ไข: ด้วย firebug เวอร์ชันใหม่กว่าอาจแก้ไขปัญหาข้ามโดเมนได้


4

การเรียกใช้คำสั่งสคริปต์และคำสั่งโดยค่าเริ่มต้นจะกระทำในบริบทของหน้าต่างระดับบนสุด หากคุณกำลังใช้เฟรมให้ใช้คำสั่งคอนโซล "cd ()"

cd () การ เรียก cd () โดยไม่มีพารามิเตอร์จะกลับไปที่หน้าต่างระดับบนสุด

cd (หน้าต่าง) ช่วยให้คุณสามารถเปลี่ยนการประเมินนิพจน์บรรทัดคำสั่งจากหน้าต่างระดับบนสุดเริ่มต้นของเว็บเพจเป็นหน้าต่างของเฟรม

ข้อมูลเพิ่มเติมที่นี่


มันคือสิ่งที่ฉันกำลังมองหา (ใช้งานได้ใน Firefox) ขอบคุณ
user2410595

4
cd(document.getElementsByTagName('iframe')[0]);

2
ยินดีต้อนรับสู่ Stack Overflow! โปรดพิจารณาแก้ไขโพสต์ของคุณเพื่อเพิ่มคำอธิบายเพิ่มเติมว่าโค้ดของคุณทำอะไรและทำไมถึงแก้ปัญหาได้ คำตอบที่ส่วนใหญ่มีเพียงรหัส (แม้ว่าจะใช้งานได้) มักจะไม่ช่วยให้ OP เข้าใจปัญหาของพวกเขา
SuperBiasedMan

ขอบคุณ! นี่เป็นวิธีที่แปลกสำหรับ firefox แต่ฉันเดาว่า "cd (iframe)" คือสิ่งที่คุณป้อนในคอนโซลเพื่อสลับบริบท ฉันให้ +1 b / c คุณช่วยฉันได้มากมาย แต่คุณควรขัดเกลาโพสต์นี้และอธิบายมัน!
Scott Smith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.