2012-06-08 36 views
11

Tôi có một tệp, hãy gọi cho chúng tôi là parent-win.html, được phân phối theo tên miền example.com. Tệp này có chứa jquery trong đó. Khung nội tuyến, cho phép gọi iframe-win.html, được nhúng trong trang này. iframe-win.html có phần tử biểu mẫu có id form-elem và giá trị Hello World!. Bây giờ tôi làm theo bên trong iframe.Làm thế nào để sử dụng jquery từ cha mẹ bên trong một khung nội tuyến?

var jQuery = parent.jQuery; 
console.log(jQuery('#form-elem').val()); 

Theo kiến ​​thức hạn chế của tôi về JS, tôi nên xem Hello World! trên bảng điều khiển nhưng thay vào đó tôi thấy không xác định. Bây giờ, câu hỏi của tôi là tôi cần phải tải jquery một lần nữa trong một khung nội tuyến hoặc tôi có thể sử dụng đối tượng jquery đã được tải trong cửa sổ cha mẹ?

Lưu ý rằng đây không phải là nội dung iframe/nội dung gốc truy cập thông thường từ parent/iframe.

+0

bản sao có thể có của [Thư viện truy cập jQuery từ khung nội tuyến] (http://stackoverflow.com/questions/5481613/access-jquery-library-from-iframe) –

Trả lời

24

thử này trong iframe:

if (typeof(jQuery) == "undefined") { 
    var iframeBody = document.getElementsByTagName("body")[0]; 
    var jQuery = function (selector) { return parent.jQuery(selector, iframeBody); }; 
    var $ = jQuery; 
} 
+0

Đây là những gì tôi đang tìm kiếm! Tôi vừa hỏi một đồng nghiệp nếu tôi cần phải vượt qua iframe như một bối cảnh cho jQuery. Cảm ơn Moin! – Kumar

+6

Câu trả lời này không xem xét tất cả các loại đối số khác mà hàm jQuery có thể thực hiện bên cạnh bộ chọn chuỗi. – thwd

+0

Tôi tìm thấy bằng cách sử dụng tài liệu tốt hơn so với sử dụng iframebody: return parent.jQuery (bộ chọn, tài liệu) – boisvert

1

Bạn cần tải jQuery bên trong iframe.

EDIT: OK, nếu khung không nằm trên cùng một tên miền, thì bạn thực hiện không phải phải tải lại jQuery. Xem Access jQuery library from iframe

+0

Điều đó tôi biết. Nhưng nếu bạn console.log jQuery trong ví dụ ở trên nó hiển thị đối tượng jQuery. Hơn nữa tôi có thể truy cập một đối tượng từ cha mẹ bằng cách sử dụng parent.object() thì tại sao không jQuery? – Kumar

+0

Thom Smith, đọc câu trả lời bạn liên kết lại, nếu iframe nằm trên miền khác, bạn phải tải jQuery bên trong nó. – dimention

+0

Câu trả lời được liên kết đến không hoạt động, hãy xem nhận xét của nó để biết chi tiết. – boisvert

5

Dưới đây là một giải pháp tốt hơn dựa trên câu trả lời của Moin:

if (typeof(jQuery) == "undefined") { 
    window.jQuery = function (selector) { return parent.jQuery(selector, document); }; 
    jQuery = parent.$.extend(jQuery, parent.$); 
    window.$ = jQuery; 
} 

Vì vậy, chúng ta có thể sử dụng $ 's chức năng như $ .get, $ .extends, v.v.

+0

và cũng hoạt động trong 'head' trong khi câu trả lời của Moin phải được đặt bên trong' body' – cske

Các vấn đề liên quan