Trong JavaScript khi nào sử dụng window.opener
/ window.parent
/ window.top
?
Câu trả lời:
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.)
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?
window.opener.opener
trước khi trang trung gian biến mất.
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:
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.
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?
top, parent, opener (cũng như window, self và iframe) đều là các đối tượng window.
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.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ự.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ínhkhi 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