2012-05-29 21 views
9

Tôi đang cố gắng gọi một hàm sau khi chức năng window.open của tôi đã được tải đầy đủ.Chức năng gọi Javascript sau khi window.open

Tuy nhiên, việc sử dụng chức năng tải đang được gọi quá sớm. URL đang được truy cập sẽ mở ra bảng tính excel và có thể mất từ ​​2 giây đến 1 phút để tải xuống.

Chức năng tải trọng đang được gọi ngay khi chức năng window.open được gọi. Tuy nhiên, tôi cần biết khi nào tài liệu excel đã được mở - không phải khi URL được truy cập.

Tôi đã cố gắng thiết lập một khoảng thời gian nhưng đó là không được gọi là:

w = window.open(url,'_parent',false); 

w.onload = function(){ 
    console.log('here'); 
    setInterval(function(){ 
     alert('Hi'); 
    },10); 
+0

Tại sao không làm điều này trong cửa sổ con? Và nếu bạn không nhớ chia sẻ mã mở tệp excel, điều đó sẽ tuyệt vời - vì tải tệp excel là kích hoạt thực bạn muốn .. –

+0

bạn có muốn đảm bảo rằng tệp excel mở hoặc bạn cần biết chính xác khi nó mở? – zaw

+0

Tôi có một lưới extjs ngồi đằng sau này mà cần phải biết khi tập tin excel đã mở/cửa sổ đã nạp đầy đủ các tài liệu. Đó là một tập lệnh CGI được gọi để mở tập tin excel. – pm13

Trả lời

4

lưu ý đầu tiên rằng để làm được điều này mà không bị chặn vì các hạn chế cross-domain (hoặc mà không cần phải parameterize tiêu đề CORS trên máy chủ của bạn), bạn phải:

  • phục vụ cả trang của bạn chính và nội dung cửa sổ bật lên (file excel của bạn) từ cùng một tên miền, và cùng một cổng
  • mở trang chính của bạn trong http:// và không file://

Nếu những điều kiện được tôn trọng, giải pháp tốt nhất là sử dụng jquery như load chức năng chờ đợi của nó "cho đến khi toàn bộ tài sản như hình ảnh đã hoàn toàn nhận được":

<html> 
    <head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    </head> 
<body> 
<script> 
var popup = window.open('popup.html'); 
$(popup.document).load(function() { 
    alert('loaded'); 
    // do other things 
}); 
</script> 
</body> 
</html> 

Hãy cẩn thận với lược đồ toàn cầu của bạn: mỗi trình duyệt/cấu hình có thể làm điều gì đó khác khi bạn nghĩ rằng họ "mở" tệp đó. Không có cách nào để phát hiện với một đơn giản open nếu họ quyết định loại bỏ nó, không phải là plugin thích hợp, chỉ cần tải về nó.

+0

Tôi không chắc chắn tiêu đề cors cho phép bỏ qua nguồn gốc của cửa sổ. – user2284570