Tôi đang làm việc trên một ứng dụng web một trang, thường được sử dụng trên các thiết bị di động. Một trong những tính năng của nó là chế độ bản đồ, tạm thời chiếm toàn bộ cửa sổ trình duyệt; một tỷ lệ khoảng cách và một số điều khiển được gắn vào bốn góc của bản đồ. Dưới đây là một ảnh chụp màn hình nhỏ của bản đồ để bạn có thể biết tôi đang nói về điều gì:
Bản đồ được thực hiện như một <div>
với position: fixed
và tất cả bốn tọa độ bằng không; Tôi cũng tạm thời thiết lập <body>
để overflow: hidden
khi bản đồ là có thể nhìn thấy để xử lý các trường hợp màn hình hiển thị ứng dụng cơ bản được cuộn ra khỏi xứ. Điều đó đủ để làm cho bản đồ hoạt động chính xác như tôi muốn trên các trình duyệt máy tính để bàn. Các trình duyệt di động cũng yêu cầu tôi cung cấp thẻ meta viewport với nội dung giống như "width=device-width,user-scalable=no"
để làm cho khu vực hiển thị của cửa sổ tương ứng chính xác với chế độ xem.
Điều này tất cả làm việc đẹp một vài năm trở lại khi tôi ban đầu đã viết ứng dụng này, nhưng ở đâu đó dọc theo dòng iOS Safari ngừng tôn vinh bất kỳ tùy chọn meta viewport liên quan đến mở rộng quy mô - rõ ràng là quá nhiều trang web được Áp dụng sai thẻ, dẫn đến văn bản đó là không đọc được nhỏ, chưa thể nhìn thấy Hiện tại, nếu bạn bật bản đồ trên trình duyệt này, bạn có thể có chế độ xem phóng to một chút, sẽ cắt các nút đó ở bên phải và bên dưới - và bạn không thể làm gì về nó, bởi vì tất cả các lần chạm được hiểu là cử chỉ thu phóng / xoay cho bản đồ, thay vì cuộn trình duyệt. Bản đồ không hữu ích lắm nếu không có các tính năng được truy cập thông qua các nút đó - và không có nút trên cùng bên phải, bạn thậm chí không thể đóng bản đồ. Cách duy nhất là tải lại trang, điều này có thể dẫn đến mất dữ liệu chưa được lưu.
Tôi chắc chắn sẽ thêm việc sử dụng history.pushState
/ onpopstate
để lớp phủ bản đồ hoạt động như một trang riêng. Bạn có thể thoát khỏi chế độ bản đồ bằng nút Quay lại của trình duyệt - nhưng điều đó không giải quyết được phần còn lại của việc mất chức năng do thiếu các nút.
Tôi đã cân nhắc sử dụng .requestFullscreen()
để triển khai lớp phủ bản đồ, nhưng nó không được hỗ trợ ở mọi nơi mà ứng dụng có thể sử dụng được. Đặc biệt, nó dường như hoàn toàn không hoạt động trên iPhone và trên iPad bạn có một thanh trạng thái và nút 'X' khổng lồ che phủ nội dung của bạn - thang đo khoảng cách của tôi có thể sẽ không thể đọc được nữa. Dù sao, đó không phải là thứ tôi thực sự muốn - tôi cần toàn bộ cửa sổ chứ không phải toàn màn hình.
Làm cách nào để có màn hình toàn cửa sổ hoạt động trên các trình duyệt hiện đại? Tất cả thông tin tôi có thể tìm thấy về chủ đề nói về việc sử dụng thẻ meta viewport, nhưng như tôi đã đề cập rằng nó không còn hoạt động nữa.