2010-03-22 32 views
13

Tôi đang làm việc trên một ứng dụng web và sử dụng Hộp chứa trình cắm thêm jQuery để bật lên một cửa sổ trình bày biểu mẫu để chỉnh sửa các phần tử của cửa sổ chính. Tôi đang sử dụng Firebug để gỡ lỗi Javascript và jQuery của tôi, và tôi nhận thấy rằng tôi không thể chọn một phần tử trong biểu mẫu HTML Colorbox của tôi bằng cách sử dụng dòng lệnh của bảng điều khiển jQuery. Ví dụ:Bộ chọn Firebug và jQuery trong iFrame

$ date = $ ("# date");

không trả lại gì khi chạy từ dòng lệnh của bảng điều khiển jQuery, mặc dù tôi có phần tử đầu vào có id = "date" và phần tử Firebug "kiểm tra" con trỏ có thể tìm phần tử trong iFrame. Có cách nào để có được giao diện điều khiển Firebug để truy cập các phần tử trong một iFrame không?

Cảm ơn sự giúp đỡ của bạn! Doug

+0

bạn có thể làm rõ, tập lệnh có hoạt động bình thường khi một phần của trang không, nhưng không phải khi chạy qua bảng điều khiển? –

+0

bạn đã thử 'var date = $ (" # date ");' – ant

+0

Javascript hoạt động trong Hộp màu, nó chỉ là tôi không thể thao tác các phần tử trong iFrame với jQuery trong giao diện điều khiển Firebug. –

Trả lời

16

Bạn cần phải vượt qua tài liệu iframe như một bối cảnh cho bộ chọn của bạn, bởi vì iframe có riêng của mình tách ra DOM cây:

$('#date', $('iframe').get(0).contentDocument); 

Để có được quyền truy cập vào nội dung iframe, nó phải được nạp từ cùng miền làm tài liệu gốc.


Chỉ cần để xây dựng ở đây, .contentDocument sở hữu các công trình trong Chrome (và FF) nhưng không phải trong IE < 8. Bạn phải sử dụng .document.

+0

Yaggo, Cảm ơn bạn đã trả lời, bạn có thể xây dựng thêm một chút không? Tôi không "nhận được" những gì bạn có nghĩa là bằng cách truy cập bối cảnh của iFrame. Cảm ơn, Doug –

+0

chỉ để xây dựng ở đây, thuộc tính '.contentDocument' hoạt động trong Chrome (và FF) nhưng không hoạt động trong IE. Bạn phải sử dụng '.document'. – Aliostad

21

Bạn đang tìm kiếm phương pháp cd, tài liệu ở đây: http://getfirebug.com/wiki/index.php/Command_Line_API

Dưới đây là một bookmarklet tôi sử dụng để tự động nhảy vào iframe cho bất kỳ ứng dụng Facebook iframe. Nó sẽ cung cấp đủ ví dụ để sửa đổi cho việc sử dụng của bạn.

javascript:with(_FirebugCommandLine){cd($$(".canvas_iframe_util")[0].contentWindow)} 

Lưu ý rằng with là thực hành thường xấu, nhưng điều này là theo nghĩa đen như thế nào Firebug thực hiện những gì bạn gõ vào giao diện điều khiển, vì vậy tôi bắt chước đó.

Sau khi bạn đã chạy điều này, mọi thứ bạn nhập vào dòng lệnh sẽ thực thi trong ngữ cảnh của khung nội tuyến.

+3

Đây là thiên tài. Cảm ơn bạn đã chia sẻ đoạn trích đó. Nó làm cho Facebook phát triển ứng dụng iframe dễ dàng hơn nhiều. –

+4

Để làm rõ, nếu bạn đang ở trong giao diện điều khiển Firebug tất cả những gì bạn cần là cd (iframedom.contentWindow) –

+0

Có, mặc dù bookmarklet là một công cụ siêu tiện dụng cho việc này. – bcherry