2011-10-28 16 views
8

Tôi đang thêm @ quy tắc phông chữ bằng cách sử dụng phương thức stylesheet.addRule() của IE. Tuy nhiên, biểu tượng @ là ký tự không được phép đối với đối số 'chọn' của phương thức đó để tôi nhận được lỗi 'đối số không hợp lệ'.Tự động thêm @ quy tắc phông chữ trong IE 8 và ít hơn

s.addrule("@font-face", "font-family: 'Font Name'; src:url('/fonts/font.eot') etc...)"; 

Có cách nào khác để tự động thêm các quy tắc này không?

Tôi đã thử đặt thuộc tính innerHTML của phần tử kiểu, đặt thuộc tính cssText của thuộc tính styleSheet và thêm một nút văn bản vào phần tử kiểu (cũng làm hỏng IE).

Bất kỳ phương pháp nào khác để thử?

+0

Tại sao Chưa có cảm nhận có điều kiện? Hơn nữa, chuỗi kiểu của bạn được trích dẫn sai. Và từ tbe spec trên msdn, không phải là chữ ký ... (selector, style [, index])? – Andreas

+0

Nhận xét có điều kiện giúp ích như thế nào? Vâng, chữ ký chức năng là như bạn nhà nước - tôi đã làm điều gì sai? Nó hoạt động tốt trong Webkit tình cờ. –

+0

[Nhận xét có điều kiện] (http://www.quirksmode.org/css/condcom.html) cung cấp một cách để chỉ định CSS chỉ áp dụng cho IE hoặc các phiên bản cụ thể của chúng. Ví dụ: ' ' – weir

Trả lời

6

Đặt thuộc tính cssText không hoạt động, nhưng bạn PHẢI chèn phần tử kiểu vào tài liệu trước khi thêm quy tắc @ phông mặt vào tài liệu. Ví dụ:

var s = document.createElement('style'); 
s.type = "text/css"; 
document.getElementsByTagName('head')[0].appendChild(s); 
s.styleSheet.cssText = "@font-face {" + rule + "}"; 

Theo tôi có thể hoàn toàn có thể đặt các loại quy tắc CSS khác trước khi chèn phần tử kiểu vào trang chứ không phải @ phông chữ.

Ví dụ ... này hoạt động tốt:

var s = document.createElement('style'); 
s.type = "text/css"; 
s.styleSheet.cssText = "body { background: red}"; 
document.getElementsByTagName('head')[0].appendChild(s); 

Nhưng điều này bị treo trình duyệt IE 8 và ít:

var s = document.createElement('style'); 
s.type = "text/css"; 
s.styleSheet.cssText = "@font-face {" + rule + "}"; 
document.getElementsByTagName('head')[0].appendChild(s); 
+0

Chrome cho tôi biết 'styleSheet' chưa được xác định. 'cssText' có vẻ là thuộc tính của 's.style'. Như đã nói, nó không chèn bất cứ thứ gì vào thẻ '