Javascript konsolunda bağlamı iframe olarak değiştirmenin bir yolu var mı?


107

Kodunu sayfadaki bir iframe içinden çalışıyormuş gibi çalıştırmak için webkit geliştirici aracı / firebug konsolunda çalıştırılan javascript'in bağlamını değiştirmek istiyorum.

Bunu iframe'deki sayfayı ayrı bir sayfada açarak yapabileceğimi biliyorum, ancak kodu üst çerçeveyle etkileşime girdiği yerde çalıştırmak istiyorum.


1
her zaman window.frames[x]modaya uygun kod çalıştırabilirsiniz . Sadece istediğiniz komutu ekleyin. IEwindow.frames[0].runFunction()
LoveAndCoding

1
@Ktash, bunu bir cevap haline getirmek ister misiniz?
Muhd

Aynı şeyi IE'de nasıl yapabilirim? Eleman bir iç IFRAME içinde bulunuyorsa, $ kullanarak konsol penceresinde bir eleman seçmeyi çok zor buluyorum. Lütfen yardım et.
tarekahf

Yanıtlar:


149

Chrome 15, konsolun kapsamını değiştirmenize olanak tanır. Konsolun altında, net konsol düğmesinin yanında, <top frame>mevcut çerçevelerin bir listesini vereceğini söyleyen bir menü var :

görüntü açıklamasını buraya girin

Firefox şu anda geliştirilmekte olan benzer bir özelliğe sahiptir :

görüntü açıklamasını buraya girin


Komut satırını kullanarak da çerçeveler arasında gezinebilirsiniz :

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

6
Aynı şeyi gerçekleştirmek için konsolda kod çalıştırabilir miyim yoksa çerçeve seçiciyi tıklatmam gerekir mi?
bodine

@bodine - bunu konsol komutundan gerçekleştirmenin bir yolunu buldunuz mu?
arty

1
Bu açılır listenin artık konsolun alt kısmında değil üst kısmında olduğunu unutmayın.
Muhd

1
Bunu Chrome 38'de görmüyorum. Bunu Chrome'da nasıl yapacağımı hemen çözemedim; bunun yerine Firefox'ta cd'yi (çerçeveler [<dizin numarası>]) kullandı.
Akrikos

1
Ne utanç. Çerçevenin içeriği değiştirilirse seçili çerçeveyi korumaz. "Üst çerçeve" ye geri döner
bryc

22

İşlevselliği <iframe>kullanarak s kodlarını çalıştırabilirsiniz window.frames[x]. Örneğin,

window.frames[0].runFunction()

FireBug tercih ettiğiniz silahsa güzel bir alternatif. Teşekkürler.
Surreal Düşler

1
JQuery komutları gibi işlevlerin dışındaki kodu nasıl çalıştırırsınız? Ya da bir çerçeve altında bir DOM öğesine referans almak istiyorsanız, o öğeye karşı kod çalıştırın?
David

Örnek olarak:window.frames[0].alert()
Shayan

6

Bugünün Chrome'unda (sürüm 52), tek yapmanız gereken, geliştirme araçlarının "Öğeler" sekmesinde iç çerçeveyi seçmektir. JS konsolunda çalıştırdığınız her şey, seçilen iframe bağlamında otomatik olarak çalışacaktır.

Örneğin, burada bir iframe seçtim document.location.pathnameve konsola yazdığımda , adres çubuğundaki URL yerine iframe'in src özelliğini döndürür:

görüntü açıklamasını buraya girin


4

Firebug çözümü için başka bir SO sorusunda bu cevaba bakınız . Ancak, Dennis'in Chrome çözümü gibi alanlar arası çalışmaz.

Düzenleme: Firebug'ın daha yeni sürümlerinde, etki alanları arası sorunu düzeltmiş olabilirler.


4

Kod deyimlerinin ve komutlarının çalıştırılması varsayılan olarak en üst düzey pencere bağlamında yapılır. Çerçeve kullanıyorsanız, "cd ()" konsol komutunu kullanın.

CD() cd () parametresiz çağrıldığında en üst düzey pencereye geri dönülür.

cd (pencere) Komut satırı ifade değerlendirmesini web sayfasının varsayılan üst düzey penceresinden çerçeve penceresine değiştirmenize olanak sağlar.

Daha fazla bilgi burada


Tam olarak aradığım şey buydu. (Firefox'ta çalışır) Teşekkürler.
user2410595

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

2
Stack Overflow'a hoş geldiniz! Lütfen kodunuzun ne yaptığı ve sorunu neden çözeceği hakkında daha fazla açıklama eklemek için yayınınızı düzenlemeyi düşünün. Çoğunlukla sadece kod içeren bir cevap (çalışıyor olsa bile) genellikle OP'nin problemlerini anlamasına yardımcı olmaz.
SuperBiasedMan

Teşekkürler! Bu, firefox'un bunu yapmasının garip bir yolu, ancak sanırım bağlamı değiştirmek için konsola girdiğiniz şey "cd (iframe)". Sana +1 b / c verdim, beni bir sürü kafa vuruşundan kurtardın, ama bu yazıyı gerçekten cilalamalı ve açıklamalısın!
Scott Smith
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.