Làm cách nào để tắt chế độ xem phóng to trên Mobile Safari?


393

Tôi đã thử cả ba thứ này đều vô ích:

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;” />

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=false;” />

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;” />

mỗi giá trị khác nhau tôi tìm thấy được đề xuất bởi tìm kiếm google hoặc tìm kiếm SO, nhưng không có giá trị ' user-scalable = X ' nào có vẻ hoạt động

Tôi cũng đã thử dấu phẩy phân định các giá trị thay vì dấu chấm phẩy, không có may mắn. Sau đó, tôi đã cố gắng CHỈ có user-scalablegiá trị hiện tại, vẫn không có may mắn.


CẬP NHẬT

Có cái này từ trang của Apple và nó hoạt động:

<meta name="viewport" content="width=device-width, user-scalable=no" />

Hóa ra vấn đề là các trích dẫn không chuẩn vì tôi đã sao chép thẻ meta từ một trang web đang sử dụng chúng, rất tiếc


6
Nếu bạn đang tạo một trò chơi, thì có thể kiểm soát thu phóng là hợp lệ. Tuy nhiên, trong gần như tất cả các trường hợp khác, nó nên được khuyến khích mạnh mẽ. Thật không may, nó đã trở thành thông lệ tiêu chuẩn cho rất nhiều nhà phát triển di động. Nếu người dùng muốn phóng to để có thể đọc văn bản dễ dàng hơn, v.v. ngăn họ làm như vậy thì không hay lắm.
dùng2268788

72
Chúng tôi đang vô hiệu hóa thu phóng trên một ứng dụng dựa trên web di động. Bạn không thể phóng to các ứng dụng iOS gốc và nó không bắt buộc trong ứng dụng web của chúng tôi. Nếu trang web hoặc ứng dụng của bạn được tối ưu hóa cho thiết bị di động thì người dùng của bạn sẽ không cần phải phóng to. Luôn có trường hợp sử dụng để vô hiệu hóa thu phóng. Nó không phải luôn luôn là cách này hay cách khác.
Lũ Bradley

10
Phải, tôi không tuân theo dòng logic rằng việc vô hiệu hóa thu phóng trên một trang web được tối ưu hóa cho thiết bị di động là một điều tồi tệ . Điều tồi tệ hơn là việc chế độ xem vô tình xoay xung quanh vì màn hình đang chọn pan vô tình và thu phóng đầu vào trên một trang web không yêu cầu bạn phải phóng to. Thực tế nếu người dùng của bạn cần phóng to nội dung trên trang web được tối ưu hóa cho thiết bị di động của bạn thì vấn đề là thiết kế chứ không phải thiếu zoom.
Nathan Hornby

3
@NathanHornby: Vấn đề vô hiệu hóa thu phóng là sự thiếu tôn trọng sở thích của người dùng. Những người dùng khác nhau thích kích thước văn bản khác nhau, khán giả trẻ có thị lực tốt có thể thích xem nhiều nội dung hơn, trong khi những khán giả có thị lực kém không thể sử dụng bất cứ thứ gì không có văn bản khổng lồ. Những người khác có Parkinsons nhưng vẫn có thị lực tốt, vì vậy họ thích các nút lớn hơn nhưng không được hưởng lợi từ văn bản lớn nói chung.
Lie Ryan

4
@NathanHornby Điều đó không có nghĩa là nhà thiết kế đã làm điều gì đó sai nhất thiết phải có. Nó đơn giản có nghĩa là người dùng, vì bất kỳ lý do gì, muốn phóng to. Pinch-zoom là một tính năng tiêu chuẩn của tất cả các điện thoại màn hình cảm ứng. Bất kỳ người dùng nào sở hữu một chiếc điện thoại như vậy, đều biết cách sử dụng nó. Tôi biết đó là một câu hỏi cũ, nhưng tôi vẫn luôn cảm thấy thất vọng bởi các nhà phát triển biết tất cả những người khăng khăng phá vỡ chức năng của điện thoại của tôi vì họ nghĩ rằng nó làm cho thiết kế của họ trông đẹp hơn.
dùng1751825

Câu trả lời:


718

Mã của bạn đang hiển thị dấu ngoặc kép thuộc tính như dấu ngoặc kép lạ mắt. Nếu các trích dẫn ưa thích có mặt trong mã nguồn thực tế của bạn, tôi sẽ đoán đó là vấn đề.

Điều này hoạt động với tôi trên Mobile Safari trong iOS 4.2.

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

12
đó là những trích dẫn lạ mắt, tôi đã sao chép thẻ từ một trang web mà không nhận thấy, cảm ơn vì đã chỉ ra điều đó!
MetaGuru

5
Có lẽ đây là cái đuôi dài ở đây nhưng có thể đáng để chỉ ra rằng điều này cần phải được áp dụng ở trang "cấp cao nhất". Nếu bạn có thẻ meta này được áp dụng cho iframe, nó sẽ không hoạt động trừ khi thẻ meta cũng được áp dụng cho trang trên cùng.
Founddrama

2
Tại sao bất cứ ai cũng sẽ tạo ra một phần mềm tạo ra các trích dẫn lạ mắt là ngoài tôi.
Traubenfuchs

3
@Traubenfuchs: Kiểu chữ.
BoltClock

3
Đây là một câu trả lời khá cũ và đi đến vấn đề tôi đã đọc rằng nếu bạn đặt người dùng có thể mở rộng thành không có điều này sẽ gây ra vấn đề về khả năng truy cập. Kể từ iOS 10, nó hoạt động tốt, cho phép người dùng phóng to nếu muốn, nhưng không phóng to hộp đầu vào. Không cần phải đặt kích thước phông chữ lớn.
David

161

Đối với những người tìm kiếm giải pháp iOS 10, user-scaleable=nobị vô hiệu hóa trong Safari cho iOS 10. Lý do là Apple đang cố gắng cải thiện khả năng truy cập bằng cách cho phép mọi người phóng to các trang web.

Từ ghi chú phát hành :

Để cải thiện khả năng truy cập trên các trang web trong Safari, giờ đây người dùng có thể chụm lại để phóng to ngay cả khi trang web đặt user-scalable = no trong chế độ xem.

Theo như tôi hiểu, chúng ta sẽ gặp may.


6
Thật là một quyết định khủng khiếp của Apple. Sử dụng một công cụ quay vòng với các nút "-" và "+" để giảm / tăng số giờ liên tục thu phóng trang vào và ra trên iOS Safari. Các máy ép đang được hiểu là nhấn đúp để thu phóng, không có cách nào để vô hiệu hóa điều đó. Chrome Chrome hoạt động hoàn hảo. Bực bội.
Paul

5
Mặc dù tôi rất khó chịu với quyết định đó nhưng tôi thực sự hài lòng với tư cách là một người dùng vì tôi muốn áp dụng tính năng này trong rất nhiều trang web sử dụng các yếu tố nhỏ bên trong.
Bishoy Hanna

10
thế giới sẽ biến thành địa ngục
người đàn ông nhỏ bé

2
Ôi trời, ai mà đoán được? Một lựa chọn vô lý khác được thực hiện bởi Apple
Emil Pedersen

3
Để lại cho Apple để áp dụng "tính năng" khả năng truy cập cho mọi người thay vì chỉ thêm một tùy chọn cho nó trong cài đặt Trợ năng ...
Lennholm

98

@mattis là chính xác rằng Safari 10 iOS sẽ không cho phép bạn vô hiệu hóa độ chụm để thu phóng với thuộc tính có thể mở rộng của người dùng. Tuy nhiên, tôi đã nhận được nó để vô hiệu hóa bằng cách sử dụng ngăn chặn Default trong sự kiện 'cử chỉ'. Tôi chỉ xác minh điều này trên Safari trong iOS 10.0.2.

document.addEventListener('gesturestart', function (e) {
    e.preventDefault();
});

8
Trên iOS 10, tôi thấy rằng điều này đã hoạt động, nhưng nếu bạn cuộn trang và sau đó pinch-zoom trong khi vẫn cuộn, nó sẽ cho phép thu phóng. Sau đó, bạn thấy mình bị kẹt ở mức thu phóng mới cho đến khi bạn cuộn lại. Vì vậy, đây không giống như một giải pháp tốt trừ khi cơ thể trang của bạn không thể cuộn được. :(
Rand Scullard

1
Một cảnh báo: người dùng vẫn có thể chạm hai lần vào màn hình sẽ / có thể phóng to và không bị bắt bởi điều này.
Stephen

1
Vẫn đôi khi cho phép thu phóng bằng cách chạm hai lần vào màn hình. :(
Jarzka

4
"Chạm hai lần" tương đương với gesturestartgì? dblclick ?
lowTechsun

3
Một lưu ý khác, nếu bạn muốn tắt khía cạnh nhấn đúp của thu phóng. Mobile Safari cũng hỗ trợ 'hành động chạm: thao tác' (thuộc 'hỗ trợ cơ bản', vô hiệu hóa các sự kiện nhấn đúp. Tài liệu tại đây: developer.mozilla.org/en-US/docs/Web/CSS/touch-action
jeremypress

15

đối với iphones safari lên đến iOS 10 "khung nhìn" không phải là một giải pháp, tôi không thích cách này, nhưng tôi đã sử dụng mã javascript này và nó đã giúp tôi

 document.addEventListener('touchmove', function(event) {
    event = event.originalEvent || event;
    if(event.scale > 1) {
      event.preventDefault();
    }
  }, false);

3
Nó nên làevent.scale !== 1
aleclarson

@aleclarson event.scale> 1 bao gồm điều kiện event.scale! == 1
Arthur Tsidkilov

@aleclarson để ngăn chặn thu phóng trên Mobile Safari là đủ, tôi đã viết rằng tôi không thích cách này, thông thường nó phải được sử dụng chế độ xem, nhưng trên iOS iphone 6 trở lên thì nó không hoạt động (tôi nghĩ là event.scale của bạn ! == 1 nên chính xác hơn, nhưng tất cả điều này không chính xác, đó là loại hack)
Arthur Tsidkilov

@aleclarson Có vẻ như đang sử dụng! == phá vỡ trình duyệt gốc trong Android 4.4; event.scale không xác định.
James Pizzurro

3
@JamesPizzurro Vâng, bạn có thể sử dụngevent.scale !== undefined && event.scale !== 1
aleclarson

11
user-scalable=0

Điều này không còn hoạt động trên iOS 10. Apple đã loại bỏ tính năng này.

Hiện tại không có cách nào bạn có thể vô hiệu hóa trang web thu phóng trên iOS, trừ khi bạn tạo ứng dụng nền tảng thô.


Thật là một người lập dị ... Có ai biết tại sao họ lại gỡ bỏ cái này không?
Stephen Tetreault

3
@smt họ không muốn trải nghiệm web cạnh tranh với trải nghiệm ứng dụng trên cửa hàng ứng dụng.
Marvin Danig

2
@marvindanig có ... vì họ mất 99 đô la phí để sản xuất một ứng dụng có thể dễ dàng trở thành một ứng dụng trang web dễ truy cập hơn cho tất cả các nền tảng. Ngoài ra, Apple cũng không thể thích "trải nghiệm web", nếu điều đó có nghĩa là người dùng + nhà phát triển có thể tránh khu vườn có tường bao quanh. Đó là tất cả về sức mạnh và tiền bạc của Apple :(
nhân

Thực sự có thể làm cho điều này hoạt động trên các phiên bản iOS mới hơn. Xem câu trả lời của tôi: stackoverflow.com/a/62165035
Feross

7

Hãy thử thêm các mục sau vào thẻ đầu của bạn:

<meta name="viewport" content="width=device-width, initial-scale=1.0, 
minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">

Ngoài ra

<meta name="HandheldFriendly" content="true">

Cuối cùng, dưới dạng thuộc tính style hoặc trong tệp css của bạn, hãy thêm văn bản sau cho Trình duyệt dựa trên webkit:

html {
    -webkit-text-size-adjust: none
}

Không hoạt động trên các phiên bản iOS mới hơn
Feross

7

Tôi đã làm cho nó hoạt động trong iOS 12 với mã sau:

if (/iPad|iPhone|iPod/.test(navigator.userAgent)) {
  window.document.addEventListener('touchmove', e => {
    if(e.scale !== 1) {
      e.preventDefault();
    }
  }, {passive: false});
}

Với câu lệnh if đầu tiên tôi đảm bảo nó sẽ chỉ thực thi trong môi trường iOS (nếu nó thực thi trong Android thì hành vi cuộn sẽ bị hỏng). Ngoài ra, lưu ý passivetùy chọn được đặt thành false.


Không hoạt động trên iOS 12.3.1 của tôi, đây là liên kết thử nghiệm: https://output.jsbin.com/liqiraj
Jess

4

Điều này hoạt động tốt trong iOS 10.3.2

    document.addEventListener('touchmove', function(event) {
        event = event.originalEvent || event;
        if (event.scale !== 1) {
           event.preventDefault();
        }
    }, false);

cảm ơn bạn @arthur và @aleclarson


iOS 13 thay đổi sai thành {thụ động: sai}
wayofthefuture 23/12/19

4

Tôi đã quản lý để ngăn chặn hành vi này bằng cách thêm phần sau vào tiêu đề HTML. Điều này hoạt động trên các thiết bị di động, vì trình duyệt máy tính để bàn hỗ trợ thu phóng khi sử dụng bánh xe chuột. Nó không phải là một vấn đề lớn trên các trình duyệt máy tính để bàn nhưng điều quan trọng là phải tính đến điều này.

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />

và quy tắc sau đây cho biểu định kiểu CSS

html {
	-webkit-text-size-adjust: none;
	touch-action: manipulation;
}


Không hoạt động trên các phiên bản iOS mới hơn
Feross

3

đôi khi những chỉ thị khác trong contentthẻ có thể làm rối tung dự đoán / phỏng đoán tốt nhất của Apple về cách bố trí trang của bạn, tất cả những gì bạn cần để tắt thu phóng pinch là.

<meta name="viewport" content="user-scalable=no" />

Không hoạt động trên các phiên bản iOS mới hơn
Feross

2

Trong Safari 9.0 trở lên, bạn có thể sử dụng thẻ meta thu nhỏ để vừa với khung nhìn như hình bên dưới

<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">

Không hoạt động trên các phiên bản iOS mới hơn
Feross

0

Tôi dại dột có một div trình bao bọc có chiều rộng được đo bằng pixel. Các trình duyệt khác dường như đủ thông minh để đối phó với điều này. Khi tôi đã chuyển đổi độ rộng thành giá trị phần trăm, nó cũng hoạt động tốt trên thiết bị di động Safari. Rất phiền phức.

.page{width: 960px;}

đến

.page{width:93.75%}

<div id="divPage" class="page">
</div>

0

Sử dụng thuộc tính CSS touch-actionlà giải pháp thanh lịch nhất. Đã thử nghiệm trên iOS 13,5.

Để tắt các cử chỉ thu phóng pinch và nhấn đúp để thu phóng:

body {
  touch-action: pan-x pan-y;
}

Nếu ứng dụng của bạn cũng không có nhu cầu di chuyển , tức là cuộn, hãy sử dụng:

body {
  touch-action: none;
}

-3

Để tuân thủ các yêu cầu về khả năng truy cập của WAI WCAG 2.0 AA, bạn không bao giờ phải vô hiệu hóa thu phóng pinch. (WCAG 2.0: SC 1.4.4 Thay đổi kích thước văn bản Cấp độ AA). Bạn có thể đọc thêm về nó ở đây: Khả năng truy cập trên thiết bị di động: Cách thức WCAG 2.0 và các hướng dẫn W3C / WAI khác áp dụng cho thiết bị di động, Thu phóng / phóng to 2.2


13
Đây không phải là câu trả lời .. và nhiều khách hàng vẫn yêu cầu chặn thu phóng .. vì vậy tôi không thể coi đây là quy tắc chung

9
Thu phóng khả năng truy cập không phải là trách nhiệm của trang (không phải bất kỳ ứng dụng nào cho vấn đề đó). Trách nhiệm của hệ điều hành là cung cấp một công cụ thu phóng có thể truy cập. Ngày nay mọi hệ điều hành đều cung cấp tính năng như vậy, áp dụng như thu phóng màn hình và nó không nên can thiệp vào việc tự phóng to của trang, vì điều này không dành cho khả năng truy cập.
Bruno Finger

4
Luôn có những trường hợp sử dụng hợp lệ cho những thứ như thế này. Vì một số lý do, gần như tất cả các tài liệu web dường như cho rằng web chỉ để tạo blog. Giống như có các trường hợp sử dụng hợp lệ cho JavaScript eval(), do đó, có để vô hiệu hóa thu phóng. Tôi đang sử dụng nó cho một ứng dụng web được sử dụng kết hợp với máy quét Bluetooth, để ngăn phóng to trang khi quét mã vạch.
dùng128216

3
Tôi hoàn toàn đồng ý với các mục tiêu của các đề xuất về khả năng truy cập, nhưng không có câu hỏi rằng có những lúc thu phóng không mong muốn hoặc không cần thiết, hoặc thậm chí có thể phá vỡ trải nghiệm người dùng. Thêm vào đó, bạn biết đấy, khách hàng.
Chuck Le Mông

2
Tôi muốn nói rằng trong một ứng dụng html / javascript, những nguyên tắc đó không được áp dụng. Rốt cuộc, một ứng dụng gốc có cho phép bạn phóng to và thu nhỏ không?
Jörgen Sigvardsson

-5

Điều này nên được làm việc trên iphone, vv

<meta name="viewport" content="width=device-width, initial-scale=1 initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.