6

Được rồi, đây là lỗi lạ nhất mà tôi từng gặp phải. Nó khá đơn giản mặc dù. Nếu tôi tải jQuery và sau đó jQuery di động động trong bất kỳ phiên bản nào của Internet Explorer, cửa sổ IE thực tế sẽ giảm thiểu. Điều này xảy ra trong tất cả các phiên bản của IE thông qua IETester, tuy nhiên, nếu tôi chạy phiên bản đầy đủ trong IE9, nó khởi động chế độ tương thích và vì một số lý do không giảm thiểu.Tự động tải jQuery mobile khiến IE giảm thiểu

Tôi đã thử nhiều cách tải các tập lệnh khác nhau (được nhận xét trong mã ví dụ), tất cả dẫn đến hành vi tương tự.

Tại sao điều này lại xảy ra? Có cách nào xung quanh nó không?

http://jsfiddle.net/Xeon06/RCsuH/

+0

Tôi có thể xác nhận rằng tôi thấy điều này xảy ra trong IE 7 trên máy ảo đơn giản. Cụ thể, cửa sổ không được * thu nhỏ * - nó được gửi đến cuối ngăn xếp (thu nhỏ các cửa sổ khác và bạn sẽ thấy cửa sổ IE của bạn vẫn mở), giống như 'window.blur()' được gọi ở đâu đó. (Trên IE 9 của tôi, nó không giảm thiểu/làm mờ và cũng không đi vào chế độ tương thích.) – josh3736

Trả lời

3

Đây là known issue trong jQuery mobile. Đường vi phạm là jquery.mobile.navigation.js:913.

// Kill the keyboard. 
// XXX_jblas: We need to stop crawling the entire document to kill focus. Instead, 
//   we should be tracking focus with a live() handler so we already have 
//   the element in hand at this point. 
// Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement 
// is undefined when we are in an IFrame. 
try { 
    $(document.activeElement || "").add("input:focus, textarea:focus, select:focus").blur(); 
} catch(e) {} 

Có cuộc gọi tới blur() đang gửi các cửa sổ IE tới mặt sau của chồng.

Cách giải quyết khác, bạn có thể tránh điều này bằng cách đặt các thẻ tập lệnh về mặt vật lý trong số <head> của HTML.

<!DOCTYPE HTML> 
<html> 
    <head> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/latest/jquery.mobile.css" /> 
    <script src="http://code.jquery.com/jquery-1.6.2.js"></script> 
    <script src="http://code.jquery.com/mobile/latest/jquery.mobile.js"></script> 

... 

Đặt thẻ tập lệnh ở nơi khác trong tài liệu hoặc chèn chúng qua tập lệnh sẽ kích hoạt lỗi.

This Fiddle demostrates cách giải quyết đang hoạt động. Lưu ý rằng điều này chỉ hoạt động trong tài liệu cấp cao nhất . Nếu tài liệu nằm trong một số , lỗi sẽ vẫn xuất hiện. Do đó, nếu bạn mở trình soạn thảo JSFiddle trong IE 7/8, nó sẽ vẫn được gửi đến mặt sau; nhưng nếu bạn chỉ mở rendered HTML, nó sẽ không.

1

nỗ lực của tôi tại "sửa chữa" nó: http://jsfiddle.net/RCsuH/6/

@ josh3736 là gần như chính xác đúng, đâu đó trong mã nó được bắn ra một document.body.blur() gây sự giảm thiểu của cửa sổ.

Sửa lỗi của tôi chỉ thay thế hàm đó bằng chức năng no-op. Tôi không thể nhận được các thẻ script để kích hoạt quá trình tải khi chúng tải xong, vì vậy việc thay thế hàm (nếu cần thiết) được để lại cho bạn.

Tuy nhiên, tất cả điều này có vẻ là một lỗi trong thư viện jQuery Mobile và do đó bạn có thể nên gửi báo cáo lỗi cho họ. Tuy nhiên, tôi không chắc chắn nó sẽ làm phiền họ quá nhiều mà có một lỗi trên IE cho một khuôn khổ đó là dành cho điện thoại di động/máy tính bảng.

Lưu ý: Đây là mã khủng khiếp, khủng khiếp thay thế các hàm gốc. Nếu có thể, đừng dùng cái này.

+0

* "Tôi không chắc nó sẽ làm phiền họ quá nhiều đến mức có lỗi trên IE cho một khuôn khổ dành cho điện thoại di động/máy tính bảng . "* IE * là * trên điện thoại di động/máy tính bảng và với máy tính bảng Windows 8 mới sắp ra mắt, đó sẽ là IE9/10.Trang web của tôi cho phép người dùng tạo các trang dành cho thiết bị di động và * xem trước * để sử dụng trang HTML/CSS/JS thực tế của trang trên thiết bị di động của họ (đây là một ý tưởng hay vì các lý do rõ ràng, đúng). Nó phá vỡ trong IE9. – Mud

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