2015-10-12 22 views
6

trong một thách thức lập trình Gần đây tôi đã tham gia vào tôi đã phải sử dụng tài sản window.name để lưu trữ/thao tác dữ liệu. Tôi phát hiện ra rằng, khi bạn thay đổi thuộc tính này, nó vẫn tồn tại thông qua các lần làm mới trang (mặc dù không phải khi mở một trang mới có cùng URL).Tại sao window.name được lưu trong bộ nhớ cache?

Thông tin duy nhất tôi có thể tìm thấy là điều này được biết và thậm chí được sử dụng bởi một số khung làm lưu trữ dữ liệu, nhưng tôi sẽ quan tâm đến lý do tại sao (như tại sao window.name vẫn tồn tại? Bất kỳ lý do lịch sử nào?) Và làm thế nào (có quy tắc nào khi window.name được giữ giữa các thay đổi của trang và khi nào nó bị loại bỏ?).

Rõ ràng, Google-fu của tôi không đủ mạnh để tìm câu trả lời cho những câu hỏi này (thậm chí không đề cập đến nó trên trang MDN!) Vì vậy tôi hy vọng rằng có thể bạn có thể giúp tôi.

Cảm ơn, David

Trả lời

1

Sự hiểu biết của tôi về nó là đối tượng cửa sổ liên tục trong suốt thời gian tồn tại của một tab và đại diện cho cửa sổ đang tải các tài liệu HTML khác nhau.

Mỗi tab chứa đối tượng window riêng của nó, đó là lý do tại sao ngay cả khi bạn điều hướng đến/từ các trang khác nhau, đối tượng cửa sổ vẫn giữ nguyên, trong khi nếu bạn kiểm tra trên tab khác, thì window.name sẽ khác.

Khi mở các trang html khác nhau, hầu hết trong số chúng không ghi đè thuộc tính window.name và tùy chọn này hoàn toàn tùy chọn. Nếu không có gì khác là thao tác nó, nó sẽ là những gì bạn để nó như là. Hầu hết các trang chỉ chạm vào thao tác window.document.

0

cửa sổ tên được sử dụng như mục tiêu liên kết, cho một:

<a href="example.html" target="some_page">some page</a> 

Liên kết sẽ mở trong một cửa sổ mới một lần, và trong cùng một cửa sổ nếu nó vẫn tồn tại trên tiếp theo nhấp chuột, với tên cửa sổ là cách nó được nhắm mục tiêu.

Đối số thứ hai của window.open cũng là tên cửa sổ.

window.open('example.html', 'some_page'); 

Bạn có thể dùng thử trong trình duyệt của mình trên các trang web không liên quan; trong bảng điều khiển của một tab, đặt window.name = 'test'; và mặt khác, sử dụng window.open('https://example.com/', 'test');. (Bạn có thể phải thông qua trình chặn cửa sổ bật lên.) Tab không liên quan sẽ điều hướng đến https://example.com/.

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