Apakah ada cara untuk mengubah konteks menjadi iframe di konsol javascript?

107

Saya ingin mengubah konteks javascript yang dijalankan di alat pengembang webkit / konsol firebug untuk menjalankan kodenya seperti dijalankan dari dalam iframe pada halaman.

Saya tahu saya bisa melakukan ini dengan membuka halaman di iframe pada halaman terpisah, tetapi saya ingin menjalankan kode yang berinteraksi dengan bingkai induk.

Muhd
sumber
1
Anda selalu dapat mengeksekusi kode dengan window.frames[x]mode. Tambahkan saja perintah apa pun yang Anda inginkan. IEwindow.frames[0].runFunction()
LoveAndCoding
1
@Ktash, mungkinkah Anda ingin menjadikannya sebagai jawaban?
Muhd
Bagaimana saya bisa melakukan hal yang sama di IE? Saya merasa sangat sulit untuk memilih elemen di jendela konsol menggunakan $ jika elemen tersebut terletak di IFRAME bagian dalam. Tolong bantu.
tarekahf

Jawaban:

149

Chrome 15 memungkinkan Anda mengubah cakupan konsol. Di bagian bawah konsol, di samping tombol konsol yang jelas, ada menu yang mengatakan <top frame>yang akan memberikan daftar bingkai yang tersedia:

masukkan deskripsi gambar di sini

Firefox memiliki fitur serupa yang sedang dikembangkan:

masukkan deskripsi gambar di sini


Anda juga dapat bernavigasi melintasi bingkai menggunakan baris perintah :

var frame = document.getElementById("frame1").contentWindow;
cd(frame);
Dennis
sumber
6
Dapatkah saya mengeksekusi kode di konsol untuk mencapai hal yang sama, atau apakah saya harus mengklik pemilih bingkai?
bodine
@bodine - sudahkah Anda menemukan cara untuk melakukannya dari perintah konsol?
Arty
1
Perhatikan bahwa tarik-turun ini sekarang berada di bagian atas konsol, bukan di bagian bawah.
Muhd
1
Saya tidak melihat ini di Chrome 38. Tidak dapat dengan cepat mengetahui cara melakukan ini di Chrome; menggunakan cd (frame [<index number>]) di Firefox.
Akrikos
1
Sayang sekali. Ini tidak akan mempertahankan bingkai yang dipilih jika konten bingkai diubah. Ini beralih kembali ke "bingkai atas"
bryc
22

Anda dapat mengeksekusi kode <iframe>dengan menggunakan window.frames[x]fungsionalitas tersebut. Sebagai contoh,

window.frames[0].runFunction()
LoveAndCoding
sumber
Alternatif yang bagus jika FireBug adalah senjata pilihan Anda. Terima kasih.
Surreal Dreams
1
Bagaimana Anda mengeksekusi kode di luar fungsi seperti perintah jQuery? Atau jika Anda ingin mendapatkan referensi ke elemen DOM di bawah beberapa bingkai, lalu jalankan kode terhadap elemen itu?
David
Jadi sebagai contoh adalah:window.frames[0].alert()
Shayan
6

Di Chrome hari ini (versi 52), yang harus Anda lakukan adalah memilih iframe di tab "Elemen" pada alat dev. Apa pun yang Anda jalankan di konsol JS akan secara otomatis berjalan dalam konteks iframe yang dipilih.

Misalnya, di sini saya telah memilih sebuah iframe, dan ketika saya mengetik document.location.pathnamedi konsol, ia mengembalikan atribut src dari iframe, bukan URL dari bilah alamat:

masukkan deskripsi gambar di sini

dpercy
sumber
4

Untuk solusi firebug lihat jawaban ini pada pertanyaan SO lainnya. Namun, tidak berfungsi lintas domain seperti solusi Chrome Dennis.

Edit: Dengan versi firebug yang lebih baru, mereka mungkin telah memperbaiki masalah lintas domain.

Muhd
sumber
4

Eksekusi pernyataan skrip dan perintah secara default dilakukan dalam konteks jendela tingkat atas. Jika Anda menggunakan frame, gunakan perintah konsol "cd ()".

cd () Memanggil cd () tanpa parameter akan kembali ke jendela level atas.

cd (window) Memungkinkan Anda untuk mengubah evaluasi ekspresi baris perintah dari jendela tingkat atas default halaman web ke jendela bingkai.

Info selengkapnya, di sini

Sebastian
sumber
Ini persis seperti yang saya cari. (bekerja di Firefox) Terima kasih.
pengguna2410595
4
cd(document.getElementsByTagName('iframe')[0]);
Andreyka Bonart
sumber
2
Selamat datang di Stack Overflow! Harap pertimbangkan untuk mengedit posting Anda untuk menambahkan lebih banyak penjelasan tentang apa yang dilakukan kode Anda dan mengapa itu akan menyelesaikan masalah. Jawaban yang sebagian besar hanya berisi kode (meskipun berfungsi) biasanya tidak akan membantu OP untuk memahami masalah mereka.
SuperBiasedMan
Terima kasih! Ini adalah cara yang aneh bagi firefox untuk melakukannya, tapi saya rasa "cd (iframe)" adalah apa yang Anda masukkan di konsol untuk mengganti konteks. Saya memberi Anda +1 b / c Anda menghemat banyak sekali saya, tetapi Anda harus benar-benar memoles postingan ini dan menjelaskannya!
Scott Smith