Có cách nào để thay đổi ngữ cảnh thành iframe trong bảng điều khiển javascript không?


107

Tôi muốn thay đổi ngữ cảnh của javascript được thực thi trong công cụ dành cho nhà phát triển webkit / bảng điều khiển firebug để thực thi mã của nó giống như nó đang chạy từ bên trong iframe trên trang.

Tôi biết tôi có thể làm điều này bằng cách mở trang trong iframe trên một trang riêng biệt, nhưng tôi muốn chạy mã nơi nó tương tác với khung chính.


1
bạn luôn có thể thực thi mã theo window.frames[x]thời trang. Chỉ cần nối bất kỳ lệnh nào bạn muốn. IEwindow.frames[0].runFunction()
LoveAndCoding

1
@Ktash, bạn có muốn trả lời câu hỏi đó không?
Muhd

Làm thế nào tôi có thể làm điều tương tự trong IE? Tôi thấy rất khó để chọn một phần tử trong cửa sổ bảng điều khiển bằng cách sử dụng $ nếu phần tử đó nằm trong IFRAME bên trong. Xin vui lòng giúp đỡ.
tarekahf

Câu trả lời:


149

Chrome 15 cho phép bạn thay đổi phạm vi của bảng điều khiển. Ở cuối bảng điều khiển, bên cạnh nút bảng điều khiển rõ ràng, có một menu cho biết <top frame>sẽ cung cấp danh sách các khung có sẵn:

nhập mô tả hình ảnh ở đây

Firefox có một tính năng tương tự hiện đang được phát triển:

nhập mô tả hình ảnh ở đây


Bạn cũng có thể điều hướng qua các khung bằng dòng lệnh :

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

6
Tôi có thể thực thi mã trong bảng điều khiển để thực hiện điều tương tự hay tôi phải nhấp vào bộ chọn khung?
bodine

@bodine - bạn đã tìm ra cách thực hiện nó từ lệnh console chưa?
arty

1
Lưu ý rằng menu thả xuống này hiện ở trên cùng của bảng điều khiển, thay vì ở dưới cùng.
Muhd

1
Tôi không thấy điều này trong Chrome 38. Không thể nhanh chóng tìm ra cách thực hiện điều này trong Chrome; đã sử dụng cd (frames [<index number>]) trong Firefox để thay thế.
Akrikos

1
Xấu hổ làm sao. Nó sẽ không giữ lại khung đã chọn nếu nội dung của khung bị thay đổi. Nó chuyển trở lại "khung trên cùng"
bryc

22

Bạn có thể thực thi mã trong <iframe>s bằng cách sử dụng window.frames[x]chức năng. Ví dụ,

window.frames[0].runFunction()

Một sự thay thế tuyệt vời nếu FireBug là vũ khí bạn lựa chọn. Cảm ơn.
Những giấc mơ siêu thực vào

1
Bạn sẽ thực thi mã bên ngoài các hàm như lệnh jQuery như thế nào? Hoặc nếu bạn muốn nhận tham chiếu đến một phần tử DOM trong một khung nào đó sau đó thực thi mã đối với phần tử đó?
David

Vì vậy, như một ví dụ sẽ là:window.frames[0].alert()
Shayan

6

Trong Chrome ngày nay (phiên bản 52), tất cả những gì bạn phải làm là chọn iframe trong tab "Phần tử" của công cụ nhà phát triển. Mọi thứ bạn chạy trong bảng điều khiển JS sẽ tự động chạy trong ngữ cảnh của iframe đã chọn.

Ví dụ: ở đây tôi đã chọn một iframe và khi tôi nhập document.location.pathnamevào bảng điều khiển, nó sẽ trả về thuộc tính src của iframe, thay vì URL từ thanh địa chỉ:

nhập mô tả hình ảnh ở đây


4

Đối với giải pháp firebug, hãy xem câu trả lời này trên một câu hỏi SO khác. Tuy nhiên, không hoạt động trên nhiều miền như giải pháp Chrome của Dennis.

Chỉnh sửa: Với các phiên bản firebug mới hơn, chúng có thể đã khắc phục sự cố tên miền chéo.


4

Việc thực thi các câu lệnh và lệnh tập lệnh theo mặc định được thực hiện trong ngữ cảnh của cửa sổ cấp cao nhất. Nếu bạn đang sử dụng khung, hãy sử dụng lệnh console "cd ()".

cd () Gọi cd () không có tham số sẽ trở lại cửa sổ cấp cao nhất.

cd (window) Cho phép bạn thay đổi đánh giá biểu thức dòng lệnh từ cửa sổ cấp cao nhất mặc định của trang web thành cửa sổ của khung.

Thông tin thêm, tại đây


Nó chính xác là những gì tôi đang tìm kiếm. (nó hoạt động trong Firefox) Cảm ơn.
dùng2410595

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

2
Chào mừng bạn đến với Stack Overflow! Vui lòng xem xét chỉnh sửa bài đăng của bạn để thêm giải thích về những gì mã của bạn làm và tại sao nó sẽ giải quyết vấn đề. Một câu trả lời chủ yếu chỉ chứa mã (ngay cả khi nó đang hoạt động) thường sẽ không giúp OP hiểu được vấn đề của họ.
SuperBiasedMan

Cảm ơn! Đây là một cách kỳ lạ cho firefox để làm điều đó, nhưng tôi đoán "cd (iframe)" là những gì bạn nhập vào bảng điều khiển để chuyển đổi ngữ cảnh. Tôi đã cho bạn +1 b / c bạn đã tiết kiệm cho tôi rất nhiều cú đánh đầu, nhưng bạn thực sự nên đánh bóng bài đăng này và giải thích nó!
Scott Smith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.