2010-03-15 26 views
6

Có cách nào để phát hiện chủ đề Windows XP nào đang được sử dụng không?javascript: phát hiện xem chủ đề cửa sổ XP hoặc Classic có được bật không

Tôi nghi ngờ rằng không có cuộc gọi api cụ thể nào bạn có thể thực hiện, nhưng bạn có thể tìm ra bằng cách kiểm tra điều gì đó trên một số phần tử DOM, tức là phát hiện tính năng.

Một câu hỏi khác: hiện chủ đề cổ điển có tồn tại trên windows vista hoặc windows 7 không?

chỉnh sửa - đây là giải pháp của tôi:

function isXpTheme() { 
    var rgb; 
    var map = { "rgb(212,208,200)" : false, 
       "rgb(236,233,216)" : true }; 
    var $elem = $("<button>"); 
    $elem.css("backgroundColor", "ButtonFace"); 
    $("body").append($elem); 
    var elem = $elem.get(0); 
    if (document.defaultView && document.defaultView.getComputedStyle) { 
    s = document.defaultView.getComputedStyle(elem, ""); 
    rgb = s && s.getPropertyValue("background-color"); 
    } else if (elem.currentStyle) { 
    rgb = (function (el) { // get a rgb based color on IE 
    var oRG =document.body.createTextRange(); 
    oRG.moveToElementText(el); 
    var iClr=oRG.queryCommandValue("BackColor"); 
     return "rgb("+(iClr & 0xFF)+","+((iClr & 0xFF00)>>8)+","+ 
        ((iClr & 0xFF0000)>>16)+")"; 
    })(elem); 
    } else if (elem.style["backgroundColor"]) { 
    rgb = elem.style["backgroundColor"]; 
    } else { 
    rgb = null; 
    } 
    $elem.remove(); 
    rgb = rgb.replace(/[ ]+/g,"") 
    if(rgb){; 
    return map[rgb]; 
    } 
} 

Bước tiếp theo là tìm ra những gì hàm này trả về máy phi xp và/hoặc tìm ra cách để phát hiện hộp cửa sổ. Tôi đã thử nghiệm điều này trong Windows XP chỉ, vì vậy vista và windows 7 có thể cung cấp cho các giá trị màu sắc khác nhau, nó nên được dễ dàng để mặc dù.

Đây là một trang giới thiệu về điều này trong hành động:

http://programmingdrunk.com/current-projects/isXpTheme/

+2

Có, chủ đề cổ điển vẫn tồn tại trên các phiên bản Windows gần đây. Tôi rất nghi ngờ mặc dù chủ đề được sử dụng là thứ mà một trang web có thể biết. Nếu có một phương pháp, tôi nghĩ rằng các quảng cáo popup trông giống như một cửa sổ Windows XP đã sử dụng đúng kiểu cách đây vài năm ;-) – Joey

+0

Công cụ tuyệt vời mkoryak! Kết quả thử nghiệm trên gói dịch vụ Win XP 3 trong máy ảo: Firefox 3.5 phát hiện chính xác cả hai; IE6 có thể nói không (nhưng tôi nghĩ rằng đó là để được mong đợi.) –

+0

@ Pekka: thực sự nó là một sự giám sát ngớ ngẩn trên một phần của tôi mà làm cho IE6 không hoạt động. Tôi cố định nó và bây giờ IE6 hoạt động =) – mkoryak

Trả lời

6

Thú vị câu hỏi. Điều duy nhất nảy ra trong đầu là kiểm tra kích thước của một nút mặc định. Nó có kiểu dáng khác nhau trong cả hai chủ đề, và tôi cho rằng nó có kích thước khác nhau. Điều này có thể là một nửa đáng tin cậy nếu bạn cung cấp cho nút một kích thước văn bản cố định.

Tôi sẽ khởi động máy ảo XP và kiểm tra xem các kích thước có thực sự khác nhau hay không.

Cập nhật: Chúng khác nhau.

Google "Tôi cảm thấy may mắn" nút

  • trong da cổ điển: (! Sic) 99 x 23,75 pixel
  • trong XP da: 97 x 21,75 pixel

Một thứ hai , phương pháp tiếp cận ít tin cậy hơn đến với tâm trí là đưa ra một phần tử CSS system colour và sau đó phân tích cú pháp kết quả tính toán màu. Ở chế độ cổ điển, thuộc tính ButtonFace sẽ có một màu xám cụ thể và tôi nghĩ một màu khác trong làn da mặc định. Một lần nữa, sẽ phải được kiểm tra.

Cập nhật: chúng cũng khác nhau.

ButtonFace màu hệ thống CSS

  • trong da Windows cổ điển: # D4D0C8
  • trong XP da: # ECE9D8

Rõ ràng, cả hai phương pháp sẽ phá vỡ nếu người dùng đã làm bất cứ tùy biến màu sắc và/hoặc kích thước phông chữ. Cách tiếp cận kích thước phông chữ là IMO đáng tin cậy hơn, vì có ít người chơi xung quanh hơn với điều đó.

Tất nhiên, bạn phải có bảng so sánh cho tất cả các thế hệ Windows, như có lẽ, giá trị cho da cổ điển và mặc định sẽ khác nhau.

+0

Tôi nghĩ rằng cách đáng tin cậy hơn có thể đáng tin cậy hơn, vì nút có thể đã được tạo kiểu bởi css, vì vậy khi bạn tạo nó, bạn sẽ không nhận được kích thước mặc định. Tuy nhiên, hãy thử cả hai cách. – mkoryak

+0

@mkoryak Tôi đã thêm kết quả thử nghiệm của mình. –

+0

@mkoryak nếu bạn buộc một "font-size' trên một nút cụ thể và đặt lại tất cả các thuộc tính khác (chiều cao, đệm, vv), bạn sẽ có thể nhận được kết quả đáng tin cậy tôi nghĩ. Bạn sẽ phải thiết lập lại rất nhiều để chắc chắn, mặc dù. –

-1

chỉ để cung cấp cho điểm bắt đầu cho IsThemeActive()

+0

err, có vẻ như C++ tôi đã nói về javascript ở đây. – mkoryak

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