2011-01-26 18 views
12

Vì vậy, tôi muốn một số tệp Javascript nhất định cho độ rộng trình duyệt nhất định. Tôi biết rằng @media phục vụ CSS cụ thể cho mỗi chiều rộng trình duyệt và một số thiết bị. Tôi sẽ làm điều gì đó tương tự cho các tệp Javascript, KHÔNG sử dụng các cuộc gọi phía máy chủ?Cách phân phối các tệp javascript khác nhau theo chiều rộng của trình duyệt

Có thể sử dụng Javascript để gọi các tệp Javascript khác dựa trên chiều rộng của trình duyệt không? Nếu có, Làm thế nào?

Xin cảm ơn trước.

+0

Tại sao bạn cần các tệp javascript khác nhau? Điều gì sẽ xảy ra nếu người dùng thay đổi kích thước cửa sổ? –

+1

Tôi hầu như không nghi ngờ rằng bạn cần mã khác nhau cho các độ rộng khác nhau, làm việc tốt hơn trên logic của bạn. –

+1

Tôi biết một cái gì đó như thế này sẽ là tuyệt vời bằng cách sử dụng các truy vấn phương tiện truyền thông. Rất nhiều yếu tố sẽ cần các js không còn tồn tại với một phong cách di động tờ. Cá nhân tôi muốn ngừng tải js hoàn toàn nếu trình duyệt giảm xuống dưới một độ rộng nhất định. –

Trả lời

3

Mặc dù tôi không chắc chắn lý do tại sao, bạn luôn có thể nhập tệp JavaScript thông qua JS Script.

Các liên kết sau cung cấp một số thông tin về điều này.

ON một mặt lưu ý - Tại sao Bạn đang tìm kiếm tại làm điều này? Chắc chắn bạn có thể nhận được độ phân giải của màn hình và sau đó điều chỉnh các tính toán/nội dung dựa trên các biến đó mà không cần phải thay đổi các tệp JS. Có rất nhiều độ phân giải khác nhau (thiết bị di động phát triển, nhiều màn hình, màn hình rộng, máy chiếu, v.v ...). Một người sử dụng cũng có thể tái kích thước các trình duyệt một cách hiệu quả làm cho điều này không có giá trị nó.

+0

Tôi đang xem xét điều này chủ yếu để chuyển các menu accordion cho kích thước cửa sổ trên thiết bị di động và một menu mờ dần trong trình đơn cho kích thước trình duyệt trên máy tính để bàn của chúng tôi. – ClosDesign

+1

@Carlos: Tôi không nghĩ rằng tôi biết một trang web trong những ngày này sử dụng trang dành cho máy tính để bàn của họ cho thiết bị di động của nó. Tôi muốn tiết kiệm cho bản thân sự đau đầu và nhìn vào việc chuyển tiếp trình duyệt và lo lắng nhiều hơn về chính trang web đó. Bên cạnh đó, trừ khi bạn có một trang web ** rất đơn giản, rất có thể bạn sẽ muốn sắp xếp nó cho anyways di động (cắt phương tiện, đồ họa dư thừa, v.v.) –

13
var scriptSrc = 'js/defaults.js'; 
if (screen.width <= 800) 
    scriptSrc = 'js/defaults-800.js'; 
else if (screen.width <= 1024) 
    scriptSrc = 'js/defaults-1024.js'; 
var script = document.createElement('script'); 
script.src = scriptSrc; 
var head = document.getElementsByTagName('head')[0]; 
head.appendChild(script); 

Có lẽ? Tự động tải chúng dựa trên độ phân giải màn hình. Cũng có thể sử dụng kích thước tài liệu, kích thước trình duyệt, vv Mặc dù tôi không tích cực bạn thực sự muốn làm điều này. Lý tưởng nhất là bạn nên xử lý các chỉ số tương đối (như% hoặc em) trong thiết kế của bạn và tránh điều này.

+0

II đã thử một cái gì đó simliar với jQuery bằng cách thiết lập một id vào thẻ tập lệnh mặc định và sau đó chuyển tệp dựa trên đó. Tôi có thể thử nó theo cách của bạn, trong Firebug tôi đã nhận được một lỗi với trang cố gắng để tải các tập tin. Tất cả các đường dẫn đều chính xác, nhưng tôi có thể nối thêm nó theo cách này. – ClosDesign

+0

Bạn có nghĩ rằng tôi có thể sử dụng điều này để bỏ qua một số tệp nhất định không? – ClosDesign

+0

@Carlos: Có, bạn có thể. Chỉ cần quan trọng là họ cần phải tránh trong quá trình tải cho đến khi bạn cần/muốn chúng. Không thể tải một tệp mà bạn đã tải mà không thực hiện một số khai báo lại nghiêm túc. Nếu bạn muốn có được ưa thích, bạn có thể làm cho các kịch bản chạy dựa trên kích thước tương đối, làm cho một số phiên bản nhưng ràng buộc nó vào một accessor phổ biến, hoặc chỉ cần tiếp tục trên con đường này và tải những gì áp dụng. –

1

Hãy thử điều này:

var fileref=document.createElement('script') 
fileref.setAttribute("type","text/javascript") 

if (window.document.body.clientWidth == XXX) { 
    fileref.setAttribute("src", "script1.js") 
} else { 
    fileref.setAttribute("src", "script2.js") 

}

0

Truyền thông truy vấn là một giải pháp tốt cho việc cung cấp phong cách thay thế cho độ rộng cửa sổ khác nhau. Thật không may, không có thuộc tính media cho phần tử <script> để tiến hành tương tự.

Tuy nhiên, bạn có thể cung cấp tập lệnh tải tập lệnh sẽ tải tệp mong muốn .js tùy thuộc vào biểu định kiểu được trình duyệt chọn trên cơ sở truy vấn phương tiện của bạn. Tôi không biết làm thế nào để làm điều này một cách trực tiếp, thanh lịch nhưng có một hack tốt đẹp cho điều đó. Bạn phải "đánh dấu" mỗi .css với một tuyên bố duy nhất (giả, không quan trọng hoặc khác nhau theo thiết kế) và kiểm tra từ bên trong JS sau khi trang đã tải để xác định biểu định kiểu nào đã được trình duyệt áp dụng.

HTML có thể trông như thế này:

<style media="handheld, screen and (max-width:1023px)"> 
    body { margin-top: 0px } 
</style> 
<style media="screen and (min-width:1024px)"> 
    body { margin-top: 1px } 
</style> 

Và JS kèm theo như sau:

function onLoad() { 
    var head = document.getElementsByTagName('head')[0]; 
    var body = document.getElementsByTagName('body')[0]; 
    var mark = window.getComputedStyle(body).getPropertyValue('margin-top'); 

    var script = document.createElement('script'); 
    script.setAttribute('src', mark=='0px' ? 'handheld.js' : 'screen.js'); 
    head.appendChild(script); 
} 

này không được công việc, nhưng chỉ trên một cơ sở cho mỗi tải. Để có được phản ứng nhanh chóng để thay đổi kích thước cửa sổ trình duyệt của người dùng, bạn nên theo dõi chiều rộng của góa phụ và tải lại trang khi cần thiết.

0

Kể từ năm 2011, thế giới đã chuyển sang thời đại di động.

Bạn có thể muốn thử: document.documentElement.clientWidth, vì nó sẽ cho bạn biết khu vực hiển thị của trang của bạn - nó phản ứng với phóng to nhưng không được quảng cáo chiêu hàng.

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