2012-03-20 48 views
9

Tôi đã gặp phải nhiệm vụ truy cập cửa sổ cha mẹ từ iFrame, nếu cửa sổ trong iFrame được tải từ một tên miền khác. Nếu tôi hiểu chính xác, tất cả các trình duyệt hiện đại đều cho phép thực hiện việc này. Vì vậy, tôi ở đây để tìm ra giải pháp tốt nhất.Truy cập cửa sổ mẹ từ iframe (tên miền chéo)

Tôi sẽ thực hiện theo cách tiếp theo này:

Tôi có lớp phủ với iFrame bên trong. Thao tác này sẽ hoạt động thay vì cửa sổ bật lên để ngăn chặn trình chặn cửa sổ bật lên chặn nội dung của tôi. Nhiệm vụ là tải lại trang chính khi tài liệu trong iFrame hoàn thành một số công việc. Trong một tài liệu, trong đó sẽ được nạp vào một iFrame, tôi sẽ thêm

<div id="is_closed" class="false"></div> 

Trong một cửa sổ cha mẹ tôi sẽ thêm chức năng, mà sẽ được gọi mỗi giây và kiểm tra nếu điều này div vẫn có tên lớp "false ". Khi điều này sẽ được thay đổi thành "true", tôi sẽ gọi một số cuộc gọi lại.

Nếu bạn có giải pháp nào tốt hơn, vui lòng chia sẻ với tôi. Sẽ đánh giá cao sự giúp đỡ nào.

Chỉnh sửa: Điều này là không thể vì không chỉ thao tác cửa sổ cha mẹ từ cửa sổ con mà còn ngược lại. Ý tưởng của tôi là thao tác cửa sổ con từ cửa sổ chính. Tôi đã sai.

+1

'Nếu tôi hiểu chính xác, tất cả các trình duyệt hiện đại đều cho phép thực hiện việc này. Vì vậy, tôi ở đây để tìm giải pháp tốt nhất.' Đây ** là ** giải pháp của bạn. Những gì bạn đang yêu cầu là không thể. –

+8

'postMessage' hoạt động trong iframe trên các miền khác nhau. – kirilloid

+1

Malgin: Nếu điều này là có thể, mọi nội dung Iframe có thể chiếm đoạt trang lưu trữ. Điều này đã bị xóa DELIBERATELY. Không có công việc xung quanh không có "giải pháp tốt nhất". –

Trả lời

12

Nếu tôi hiểu chính xác, tất cả các trình duyệt hiện đại hiện cho phép thực hiện việc này. Vì vậy, tôi ở đây để tìm ra giải pháp tốt nhất.

này giải pháp của bạn. Những gì bạn đang yêu cầu là không thể.

Xem các câu hỏi liên quan:

EDIT

Như đã đề cập trong các ý kiến ​​dưới đây, @JeremysA Câu trả lời của wesome cung cấp một phương thức cho phép các yêu cầu miền chéo trong một số trường hợp nhất định. Xem câu hỏi SO dưới đây để biết thêm thông tin.

Ways to circumvent the same-origin policy

+1

Tôi hiểu rằng điều này là không thể _manipulate_ cửa sổ cha mẹ từ cửa sổ con. Những gì tôi đang tìm kiếm là làm thế nào để _imitate_ thao tác này. Nói cách khác, một số cờ từ cửa sổ con mà cửa sổ cha sẽ chạy một đoạn mã nào đó, sẽ thực hiện. –

+1

@Malgin, một lần nữa, điều này là không thể. Bạn đang yêu cầu ** tương tác cấp tập lệnh ** giữa các trang. Điều này là không thể. Bạn không thể bắt chước cái gì đó không thể được làm. Có rất nhiều câu hỏi về SO đối phó với điều này. Xem chỉnh sửa. –

+1

Điều duy nhất mà không rõ ràng với tôi từ bạn câu trả lời là nó là không thể thao tác cửa sổ con từ cửa sổ cha mẹ hoặc. Đó là suy nghĩ của tôi khiến tôi kiên trì hơn. Cảm ơn một lần nữa. –

5

nhưng bạn có thể thay đổi các thuộc tính của srciframe (thêm một #hashtag ví dụ) và lắng nghe sự kiện onhashchange trong cửa sổ con. Cho rằng bạn đang ở vị trí để thay đổi cả hai trang.

35

Nếu tôi là bạn, tôi sẽ kiểm tra window.postMessage. Nó có thể làm những gì bạn muốn:

Để tham khảo thấy như sau:

+1

Đây là câu trả lời đúng. Các cuộc gọi js giữa nhiều miền giữa các cửa sổ (hoặc iframe) hiện có thể sử dụng trong HTML5 bằng Window.postMessage. – Molomby

+0

Ngoại trừ trên IE frandroid

-3

đặt biến/mục trong phiênStorage và sử dụng nó trên cả hai mặt tùy thích. localStorage có thể làm điều đó trong thời gian dài hơn.

rủi ro bảo mật là người nào đó sử dụng và thao túng điều này để chiếm đoạt bên cạnh bạn. NHƯNG nếu ai đó muốn làm như vậy - thì sẽ có khả năng.

Hãy nhớ: Cuộc sống tìm một cách ... ;-)

+1

Câu hỏi là quyền truy cập miền chéo. Bạn không thể truy cập miền chéo lưu trữ cục bộ/phiên lưu trữ cục bộ? – Sudi

+0

bạn có thể sử dụng tên miền chéo nếu bạn biết tên của các biến –

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