2010-03-08 52 views
6

Tôi có một số tập lệnh theo dõi và dịch vụ web được cài đặt trên trang web của mình và tôi nhận thấy khi một trong các dịch vụ bị trục trặc, nó vẫn cố gắng gọi tệp javascript bên ngoài được lưu trữ trên máy chủ khác. Trong Firefox, Chrome và các trình duyệt mới khác, có vẻ như không có bất kỳ vấn đề nào khi một trong các dịch vụ đi xuống. Tuy nhiên, trong IE7 và IE8, các trang của tôi không tải tất cả các cách và thời gian ra trước khi mọi thứ được hiển thị. Có cách nào để thêm một thời gian trên các cuộc gọi javascript để ngăn chặn họ phá vỡ các trang của tôi khi họ đi xuống?Hết thời gian chờ bên ngoài

Trả lời

5

Bạn có thể tải chúng tự động sau khi tải trang với JS. Nếu các tệp JS nằm trên một máy chủ khác, trình duyệt sẽ vẫn hiển thị chỉ báo "trình duyệt bận" khi bạn thực hiện điều đó, nhưng trang gốc sẽ tải.

Nếu bạn có thể tải JS từ trang web của riêng mình, bạn có thể tải nó bằng XMLHttpRequest sau khi tải trang (hoặc với người trợ giúp thư viện JS yêu thích của bạn, ví dụ: jQuery $.ajax(...)) và sau đó đánh giá nó. Bằng cách này, chính việc tìm nạp sẽ không hiển thị chỉ báo bận của trình duyệt.

Để tải JS từ trang web của riêng bạn, bạn có thể tải xuống từ nhà cung cấp theo dõi của bạn (không được hỗ trợ chính thức nhưng thường hoạt động) - chỉ cần nhớ nạp lại các phiên bản mới mỗi lần - hoặc bạn có thể tạo một "chuyển tiếp" dịch vụ trên trang web của riêng bạn mà lấy nó từ nhà cung cấp theo dõi và lưu trữ nó cục bộ trong một thời gian. Bằng cách này, JS của bạn sẽ không gặp nguy hiểm.

Steve Souders có thêm thông tin về deferred loading of scripts and browser-busy indicators.

+0

+1 đó là một liên kết tốt. –

2

Hãy thử thêm defer="defer"

Thuộc tính Hoãn đưa ra một gợi ý để trình duyệt mà kịch bản không tạo ra bất kỳ nội dung để trình duyệt có thể tùy hoãn giải thích kịch bản . Điều này có thể cải thiện hiệu suất bằng cách trì hoãn thực thi tập lệnh cho đến sau khi nội dung nội dung được phân tích cú pháp và hiển thị.

Sửa
Điều này sẽ ngăn chặn những kịch bản từ chạy cho đến khi tải trang:

function loadjs(filename) { 
    var fileref=document.createElement('script'); 
    fileref.setAttribute("type","text/javascript"); 
    fileref.setAttribute("src", filename); 
} 

window.onLoad = function() { 
    loadJs("http://path.to.js"); 
    loadJs("http://path.to2.js"); 
    ... 
} 
+0

không được hỗ trợ trên tất cả các trình duyệt: ( – orip

+0

Yah Tôi nghĩ rằng vấn đề thực sự là IE đang cố kết nối với tệp JS bên ngoài và thời gian chờ mặc định được đặt quá cao. có vẻ như bạn biết một cách nhanh chóng rằng các tập tin không đáp ứng và di chuyển theo đó.Tôi tự hỏi nếu có bất kỳ cách nào để ngăn chặn điều đó .... – mike

+0

Vâng, bạn có thể tải các tập tin javascript bên ngoài bằng cách sử dụng javascript, không html. '