2011-12-25 36 views
5

Tôi đã tạo trang web sử dụng một loại ... khảo sát bên ngoài. Tôi đã tự hỏi nếu khi sử dụng phương pháp window.open, bạn có thể cho biết nếu cửa sổ mới của bạn có 404 hoặc trang hết thời gian cố gắng tải không?window.open .. Một cách để biết cửa sổ đã hết thời gian chờ hay 404?

Dưới đây là những gì tôi có cho đến nay:

child = window.open(href, 'window'); 
     setTimeout(function() { 
      // Do some backend processing if child window is still open and no 404/timeout 
     }, 10000); 
+0

là cửa sổ bật lên trong cùng một tên miền và bạn có kiểm soát nội dung của nó không? – sled

+0

Không, cửa sổ mới sẽ là một URL bên ngoài và không kiểm soát nội dung – Wilson212

Trả lời

1

Đó là một điều khá khó làm. Bạn phải đối phó với các vấn đề an ninh (truy cập tên miền chéo bị cấm trong JS). Nhưng tôi cho rằng chức năng này có thể thực hiện thủ thuật:

child = window.open(href, 'window'); 
     setTimeout(function() { 
      try { 
       var foo = child.location; 
      } 
      catch (err) { 
       // It has loaded. Manage that. 
       return; 
      } 
      // Still loading. Code here. 
      } 
     }, 10000); 

Giải thích: thử truy cập phần location của cửa sổ con. Nếu cửa sổ đã tải, cố gắng truy cập nó sẽ ném một ngoại lệ (truy cập JS tên miền chéo bị cấm) để bạn quản lý điều đó. Nhưng nếu bạn có thể truy cập vào vị trí có thể có nghĩa là nó vẫn đang tải.

Vấn đề chính là, với mã này, bạn chỉ có thể phân biệt khi nó đang tải hay không, vì vậy tôi cho rằng bạn chỉ có thể kiểm tra thời gian chờ. Tôi nghĩ rằng việc kiểm tra lỗi 404 gần như không thể vì các hạn chế bảo mật của JS không cho phép bạn lấy vị trí hoặc nội dung của trang bên ngoài.

1

Có xem xét yêu cầu ajax cross-domain:

http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

Có một vài cách bạn có thể sử dụng nó tùy thuộc vào cách trang web từ xa được cấu trúc, nhưng ít nhất bạn có thể kiểm tra xem trang có tồn tại trước khi khởi chạy cửa sổ bật lên (mặc dù điều này không đảm bảo rằng trang đó sẽ tải trong cửa sổ bật lên).

Cách khác, có cửa sổ bật lên tải tập lệnh cục bộ (php, v.v.) đầu tiên thực hiện kiểm tra cUrl hoặc từ xa khác ... kiểm tra tiêu đề được trả về và sau đó - nếu tất cả đều tốt - nó sẽ gửi tiêu đề để chuyển tiếp đến trang từ xa. Nếu một mã lỗi được trả về, sau đó bạn có cửa sổ popup tải một trang html/js cục bộ có một kịch bản có thể nói chuyện với cửa sổ mở để cho nó biết rằng nó không thành công.

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