2012-12-11 32 views
16

Về cơ bản những gì tôi muốn làm là một cái gì đó để tác dụng của việc này:Có cách nào để có một cuộc gọi lại sau khi thay đổi window.location.href không?

window.location.href = "some_location"; 
window.onload = function() { 
    alert("I'm the new location and I'm loaded!"); 
}; 

Có cách nào để có một cuộc gọi lại khi vị trí mới của cửa sổ được nạp? (Mã trên không hoạt động.)

+1

thay đổi 'location.href' làm cho trang hiện tại đóng và một trang mới để mở vì vậy không thể kích hoạt bất kỳ sự kiện nào trên trang cũ khi trang mới được tải – qwertymk

Trả lời

15

Không, bạn không thể thực hiện theo cách bạn muốn. Việc tải một trang mới sẽ đóng tài liệu hiện tại và bắt đầu tải một tài liệu mới. Bất kỳ mã nào trong tài liệu hiện tại của bạn sẽ không còn hoạt động khi trang mới bắt đầu tải.

Để có trình xử lý sự kiện khi tải tài liệu mới, bạn cần chèn mã vào tài liệu của trang mới hoặc tải tài liệu mới vào khung nội tuyến và theo dõi tải khung nội tuyến từ tài liệu hiện tại của bạn.

+1

Điều gì xảy ra nếu cửa sổ là cửa sổ mới: var w = window.open (""); w.location.href = "some_location"; w.onload = function() {alert ("Hi!");}; Giả sử rằng có một lý do thực sự tôi cần phải sử dụng chuyển hướng thay vì chỉ mở trực tiếp vào URL, như tôi cần phải chuyển hướng theo phản hồi của yêu cầu hoặc điều gì đó. Có cách nào không? – Lukas

+2

@Lukas - nếu bạn đang mở một cửa sổ mới (giống với khung), có các hạn chế bảo mật nếu cửa sổ nằm trên các miền khác nhau và bạn không thể đặt trình xử lý sự kiện trong cửa sổ đó. Nếu cửa sổ của bạn nằm trên cùng một miền, bạn sẽ có thể đặt trình xử lý tải trên cho nó. – jfriend00

+0

Hmmm ... Kiểm tra http://jsfiddle.net/42hKC/ - Tôi đang mở một cửa sổ mới trong cùng một miền, đính kèm một tải lên cửa sổ mới và nó không bao giờ kích hoạt. – Lukas

2

Đặt window.location.href thành giá trị mới yêu cầu trình duyệt chỉ cần truy cập trang tiếp theo.

Giống như vậy:

window.location.href = "http://www.google.com/"; 

Khi trình duyệt đi vào google.com, đó là nó, Javascript của bạn không còn thực hiện, và không có cách nào để bạn có thể có bất kỳ loại gọi lại, vì trình duyệt không còn chạy trang của bạn nữa.

Vì vậy, câu trả lời là không.

+0

Sai. Javascript của tôi vẫn đang chạy - trong cửa sổ gốc điều khiển cửa sổ được cập nhật. – 7vujy0f0hy

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