2010-10-18 29 views
5

Tôi đã tự hỏi cách tốt nhất là phát hiện khi trang tải xong, nơi trang được đề cập nằm trong một tab hoặc cửa sổ khác, ... và nơi trang được tải có thể là bất kỳ trang nào trên web và không nằm trong tầm kiểm soát của tôi.Javascript để phát hiện khi trang đã tải trong một cửa sổ khác trong Firefox

Tôi chỉ sử dụng Firefox và không ngại nếu giải pháp yêu cầu mở rộng Firefox hoặc tập lệnh Grease Monkey (Tôi đã thêm cấu hình/lệnh để cho phép truy cập các trang từ các miền khác nhau).

Mã bên dưới cho thấy một nỗ lực. Đôi khi nó phát hiện khi trang đầu tiên đã được tải nhưng khi tôi nhấn 'submit' để tải lại một trang mới vào cửa sổ khác, nó không phát hiện ra nó.

Cảm ơn.

<html> 
<head> 
<script type="text/javascript"> 

    currentPageObj = window.open("http://www.bbc.co.uk", "currentPage"); 

    currentPageObj.addEventListener("load", function(){alert("loaded")}, false); 

</script> 
</head> 
<body> 

    <form action="http://www.example.com" target="currentPage"> 
     <input type="submit"> 
    </form> 

</body> 
</html> 
+0

Hai trang này có thuộc cùng một tên miền không? – Robusto

+0

Không, nó có thể là bất kỳ trang web – spiderplant0

Trả lời

1

Trong trang khác chỉ có trình xử lý sự kiện onload gọi phương thức trong cửa sổ chính (window.opener) để thực hiện những gì bạn muốn. ví dụ. trong trang con:

window.addEventListener('load', function() { 
    if (window.opener && !window.opener.closed) { 
    window.opener.childLoaded(); 
    } 
}, false); 

Và có childLoad làm những gì bạn muốn trong cửa sổ chính. (Lưu ý: tốt nhất bạn nên liên hệ với cửa sổ bạn muốn xử lý, ví dụ: khởi tạo var parentWindow = window; vì khi bạn gọi giữa các cửa sổ, điều này có thể gây nhầm lẫn.)

+0

Cảm ơn andrewmu, nhưng tôi quên đề cập đến trong cửa sổ khác tôi đang tải một trang từ một miền khác mà tôi không có quyền kiểm soát và do đó tôi không thể chỉnh sửa trang này. – spiderplant0

+0

Ok .. đó là khó khăn sau đó. Trừ khi bạn thực hiện một số proxy thông minh thông qua máy chủ của bạn và chèn phản hồi thích hợp vào trang trên đường trở về. Ví dụ. đưa phần trên vào thẻ tập lệnh được chèn trước số của câu trả lời trước khi bạn gửi cho trình duyệt. – andrewmu

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