2011-08-05 19 views
14

Điều này liên quan đến SSL and mixed content due to CSS background images nhưng câu hỏi đó không có câu trả lời được chấp nhận và câu hỏi tôi yêu cầu cụ thể hơn một chút.Chính xác những quy tắc nào để tránh cảnh báo "nội dung hỗn hợp" trong IE do hình nền?

Trong một số trường hợp khi truy cập trang web HTTPS, IE sẽ ném cảnh báo "nội dung hỗn hợp" nếu phần tử được đưa ra một kiểu có hình nền. Tôi thấy one forum reference mà nói cảnh báo có thể tránh được nếu bạn đặt các tài liệu tham khảo trong một kiểu, ví dụ

#someElement a { 
    width:11px; 
    height:11px; 
    display:block; 
    overflow:hidden; 
    background:url(../images/sprites_list.png) no-repeat; 
    cursor:hand; 
    cursor:pointer; 
    background-position:0px -72px; 
} 

nhưng không nếu bạn cố gắng để tạo ra các inline yếu tố, a la

$('#someElement').append("<a title='something' style='background: url(../images/sprites_list.png) no-repeat; ... // etc 

và thực sự , điều này làm việc cho tôi. Tôi đã thấy những người khác nói rằng bạn phải sử dụng URL https tuyệt đối để tham chiếu đến hình ảnh chứ không phải là hình ảnh tương đối.

Câu chuyện có thật ở đây là gì? Có một số giải thích "chính thức" hay ít nhất là một tham chiếu đến những quy tắc đó là gì? Hoặc thất bại, có một bộ tiêu chuẩn hướng dẫn mà nếu theo sau làm cho nó rất khó để kích hoạt cảnh báo?

+1

Bạn cũng có thể sử dụng giao thức tương đối: http://paulirish.com/2010/the-protocol-relative-url/ – js1568

+0

Thú vị. Tôi sẽ xem xét điều đó. Nhưng tôi thực sự cần URL tương đối vì đây là tệp CSS tĩnh và không "biết" cơ sở URL tuyệt đối cho phần còn lại của nội dung tĩnh của tôi. – Dan

+1

FYI, URL tương đối giao thức _won't_ làm việc xung quanh lỗi IE8 cụ thể này nếu bạn đang đặt hình nền thông qua JavaScript. Bạn _must_ sử dụng URL đầy đủ - bao gồm lược đồ và máy chủ - để tránh cảnh báo nội dung hỗn hợp của IE8 khi thực hiện các thao tác kiểu JS. ('element.style.backgroundImage =" //example.com/foo.png "' sẽ cảnh báo.) medmunds

Trả lời

10

Sử dụng URI đủ điều kiện sẽ tránh được sự cố của IE8 và dưới đây không chính xác tạo URI không có thật như about: /relative/file.png kích hoạt cảnh báo nội dung hỗn hợp. Vấn đề này đã được sửa trong IE9.

+0

Cảm ơn đây là câu trả lời tôi đang tìm kiếm. Nhưng chính xác thì cái gì về 'tương đối'? Tôi đã không nghe nói về điều đó trước đây. Btw công việc tốt đẹp với Fiddler - đó là một phao cứu sinh trong thử nghiệm IE 7 và 8 của tôi. – Dan

+0

Tôi nghĩ rằng "thân nhân" chỉ là giả mã của Eric cho một số đường dẫn tương đối tùy ý. Vì vậy, bạn gõ vào "/path/to/file.ext", và tôi đoán IE biến nó thành "about: /path/to/file.ext", điều này rõ ràng là ngu ngốc. – Tom

+0

@Tom là chính xác. Vấn đề là các URI tương đối đang được kết hợp với một tạm thời về: đánh dấu trống. Vì vậy, về: blank + /path/to/file.ext sản lượng about: /path/to/file.ext, được xử lý không chính xác là không an toàn. – EricLaw

0

Tôi nghĩ lý do bạn nhận được kết quả khác nhau không phải vì phương pháp một "an toàn hơn", nhưng vì URL vi phạm không có trong tài liệu cơ sở khi IE tải nó. Tôi hy vọng bạn sẽ nhận được cảnh báo nếu bạn đã đặt trực tiếp số đó A trong tài liệu thay vì viết kịch bản sau khi trang đã tải.

Nếu tôi đúng trong chẩn đoán của tôi, điều này có nghĩa là không có bất kỳ điều gì chưa được nêu trong quy tắc về nội dung hỗn hợp.

Ngoài ra: URL tương đối giao thức thật tuyệt vời. Nói chung.

+0

Vì vậy, quy tắc là tôi không thể thêm tham chiếu mới vào nội dung nội tuyến khi đang di chuyển, ngay cả khi các liên kết đó có dưới HTTPS không? Nếu đó là quy tắc, tôi có thể sống với nó, nhưng tôi muốn một số xác nhận. Ngoài ra, nếu đó là quy tắc, tại sao nó không ảnh hưởng đến các thẻ '' thông thường mà tôi thêm vào HTML của mình? – Dan

+0

Tôi sẽ không đi xa như vậy để nói rằng bạn không nên làm điều đó. Tôi chỉ nghĩ rằng giải thích các hành vi khác nhau mà bạn đang nhìn thấy. Đọc nhận xét của bạn đến 65Fbef05, tôi hơi bối rối. – Tom

0

Sau vô số giờ cùng một vấn đề, tôi không thể tìm ra vấn đề. Sau đó tôi bắt đầu chọn mã nguồn của mình và tìm thấy nó. Tôi đang sử dụng HTML5 và tôi đang sử dụng shiv bên trong nhận xét có điều kiện để làm cho các phần tử HTML5 hoạt động trong IE8 trở xuống.

<!--[if lte IE 8]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]--> 

Vấn đề của tôi là IE8 trở xuống đã xảy ra lỗi. Vấn đề đó đã được giải quyết bằng cách thay đổi ở trên thành https, với những điều sau đây:

<!--[if lte IE 8]><script src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]--> 

Tôi chưa thử nghiệm, nhưng tôi tưởng tượng những điều sau đây cũng có thể hoạt động.

<!--[if lte IE 8]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]--> 

Nó có thể cứu ai đó xuống đường. Nếu không, thì chúc may mắn!

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