Khi nào sử dụng window.opener / window.parent / window.top


94

Trong JavaScript khi nào sử dụng window.opener/ window.parent/ window.top?


3
đó cũng là một window.self đó đề cập đến cùng một cửa sổ :)
CodingOnSteroid

Câu trả lời:


167
  • window.openerđề cập đến cửa sổ được gọi window.open( ... )để mở cửa sổ mà từ đó nó được gọi là
  • window.parentđề cập đến cha của một cửa sổ trong <frame>hoặc<iframe>
  • window.topđề cập đến cửa sổ trên cùng từ một cửa sổ được lồng trong một hoặc nhiều lớp <iframe>cửa sổ phụ

Đó sẽ là null(hoặc có thể undefined) khi chúng không liên quan đến tình huống của cửa sổ giới thiệu. ("Cửa sổ giới thiệu" có nghĩa là cửa sổ có mã JavaScript được chạy trong ngữ cảnh.)


1
Cảm ơn @pointy đã trả lời. Tôi có một trang chính mở ra một đứa trẻ sử dụng window.open()khi gửi trang. Bây giờ cửa sổ con này mở một cửa sổ con khác với cùng một lần window.open()đóng. Bây giờ khi tôi gửi đứa con thứ hai của mình (đứa con đầu tiên không còn nữa), tôi muốn truy cập vào các phần tử trang của trang chính của tôi. Điều này có thể xảy ra từ đứa con thứ hai khi đứa con thứ nhất không còn nữa không?
Sriram

4
@Sriram: Đó là loại thông tin bạn cần đưa vào câu hỏi của mình để mọi người biết bạn đang thực sự cố gắng giải quyết vấn đề gì.
josh3736

5
@Sriram bạn sẽ phải lấy window.opener.openertrước khi trang trung gian biến mất.
Pointy

24

Tôi nghĩ bạn cần thêm một số ngữ cảnh vào câu hỏi của mình. Tuy nhiên, thông tin cơ bản về những điều này có thể được tìm thấy ở đây:

window.opener https://developer.mozilla.org/en-US/docs/Web/API/Window.opener

Tôi đã sử dụng window.opener chủ yếu khi mở một cửa sổ mới hoạt động như một hộp thoại yêu cầu người dùng nhập và cần chuyển thông tin trở lại cửa sổ chính. Tuy nhiên, điều này bị hạn chế bởi chính sách nguồn gốc, vì vậy bạn cần đảm bảo cả nội dung từ hộp thoại và cửa sổ mở đều được tải từ cùng một nguồn gốc.

window.parent https://developer.mozilla.org/en-US/docs/Web/API/Window.parent

Tôi đã sử dụng điều này hầu hết khi làm việc với IFrame cần giao tiếp với đối tượng cửa sổ chứa chúng.

window.top https://developer.mozilla.org/en-US/docs/Web/API/Window.top

Điều này hữu ích để đảm bảo bạn đang tương tác với cửa sổ trình duyệt cấp cao nhất. Bạn có thể sử dụng nó để ngăn trang web khác ghép khung trang web của bạn, trong số những thứ khác.

Nếu bạn thêm một số chi tiết vào câu hỏi của mình, tôi có thể cung cấp các ví dụ khác có liên quan hơn.

CẬP NHẬT: Có một số cách bạn có thể xử lý tình huống của mình.
Bạn có cấu trúc sau:

  • Cửa sổ chính
    • Hộp thoại 1
      • Hộp thoại 2 được Mở bằng Hộp thoại 1

Khi Hộp thoại 1 chạy mã để mở Hộp thoại 2, sau khi tạo Hộp thoại 2, hãy đặt hộp thoại 1 đặt một thuộc tính trên Hộp thoại 2 tham chiếu đến bộ mở Hộp thoại 1.

Vì vậy, nếu "childwindow" là bạn biến cho đối tượng cửa sổ hộp thoại 2 và "cửa sổ" là biến cho đối tượng cửa sổ Hộp thoại 1. Sau khi mở hộp thoại 2, nhưng trước khi đóng hộp thoại 1, hãy thực hiện một phép gán tương tự như sau:

childwindow.appMainWindow = window.opener

Sau khi thực hiện nhiệm vụ ở trên, đóng hộp thoại 1. Sau đó, từ đoạn mã chạy bên trong hộp thoại2, bạn sẽ có thể sử dụng window.appMainWindowđể tham chiếu cửa sổ chính, đối tượng cửa sổ.

Hi vọng điêu nay co ich.


Cảm ơn @Mark đã trả lời. Tôi có một trang chính mở ra một đứa trẻ sử dụng window.open()khi gửi trang. Bây giờ cửa sổ con này mở một cửa sổ con khác với cùng một lần window.open()đóng. Bây giờ khi tôi gửi đứa con thứ hai của mình (đứa con đầu tiên không còn nữa), tôi muốn truy cập vào các phần tử trang của trang chính của tôi. Điều này có thể xảy ra từ đứa con thứ hai khi đứa con thứ nhất không còn nữa không?
Sriram

câu trả lời cập nhật. @ josh3736 - Tôi không thấy nhận xét đó hữu ích như thế nào. Tôi không khuyên bất cứ ai đạt được chứng chỉ w3schools. Mọi người ở đây đều biết cách lên google và có được định nghĩa cơ bản về window.opener, window.top và window.parent. Sử dụng các liên kết ở trên hoặc tìm các tài liệu tham khảo mới, nhưng hầu như không có bất kỳ điểm nào trong việc sao chép thông tin chỉ đơn giản xác định các thuộc tính này tại đây.
Đánh dấu tại Ramp51

Giải thích thực sự hữu ích @ MarkAtRamp51 Cảm ơn!
Sriram

3
Liên kết giải thích - rất chi tiết - có gì sai với w3schools. Vấn đề là tránh quảng cáo hoặc liên kết đến (và do đó làm tăng Xếp hạng Trang của Google) w3schools như một nguồn thông tin có thẩm quyền. W3S phát tán thông tin xấu và một phần của vấn đề là có quá nhiều người liên kết đến thông tin xấu đó. Tốt hơn là nên liên kết đến một nguồn thông tin đáng tin cậy hơn, như MDN .
josh3736

5

top, parent, opener (cũng như window, self và iframe) đều là các đối tượng window.

  1. window.opener -> trả về cửa sổ mở hoặc khởi chạy cửa sổ bật lên hiện tại.
  2. window.top -> trả về cửa sổ trên cùng, nếu bạn đang sử dụng khung, đây là cửa sổ bộ khung, nếu không sử dụng khung, đây giống như cửa sổ hoặc tự.
  3. window.parent-> trả về khung mẹ của khung hiện tại hoặc khung nội tuyến. Khung mẹ có thể là cửa sổ bộ khung hoặc một khung khác nếu bạn có các khung lồng nhau. Nếu không sử dụng khung, cha giống với cửa sổ hiện tại hoặc chính

1

khi bạn xử lý cửa sổ bật lên window.opener đóng một vai trò quan trọng, vì chúng ta phải xử lý các trường của trang mẹ cũng như trang con, khi chúng ta phải sử dụng các giá trị trên trang mẹ, chúng ta có thể sử dụng window.opener hoặc chúng ta muốn một số dữ liệu trên cửa sổ con hoặc cửa sổ bật lên tại thời điểm tải, sau đó một lần nữa chúng ta có thể đặt các giá trị bằng window.opener

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.