★AppGiaiTri Đăng nhập
Hậu trường AppGiaiTri

Nhấn giữ trên iPhone bị bôi xanh cả trang: người dùng báo, chúng tôi sửa trong ngày

Giữ nút nửa giây là cả màn hình chuyển xanh và nút tự nhả. Vì sao Safari huỷ lượt chạm, ba lớp chặn mà vẫn chừa ô nhập chữ, và vì sao “sửa xong” chưa phải là “người dùng đã nhận bản sửa”.

Nhấn giữ trên iPhone bị bôi xanh cả trang: người dùng báo, chúng tôi sửa trong ngày

Có những lỗi mà người làm không bao giờ tự thấy, vì họ không cầm máy theo cách người dùng cầm. Lỗi “nhấn giữ bị bôi xanh cả trang” trên iPhone là một lỗi như vậy. Người dùng báo, và bản sửa đến tay mọi người trong cùng ngày. Nghe thì gọn, nhưng giữa hai mốc đó là một chuỗi hiểu lầm đáng kể lại: cả về cách Safari xử lý cú chạm, lẫn về việc “sửa xong” khác “người dùng nhận được bản sửa” như thế nào.

Người dùng thấy gì

Phần lớn các ứng dụng của chúng tôi có thao tác giữ: giữ nút lái và nút drift trong Rượt Đuổi, giữ nút ĐỠ trong Chiến Đấu, giữ và kéo đồ vật trong Thỏ Dâu. Lời báo lỗi gửi về mô tả rất rõ:

  • Giữ ngón tay chừng nửa giây thì cả màn hình chuyển xanh, như lúc bôi đen một đoạn văn.
  • Đôi khi hiện thêm chiếc kính lúp nhỏ phía trên ngón tay.
  • Ngay lúc đó, nút đang giữ “nhả” ra: xe thôi drift, võ sĩ hạ tay đỡ, món đồ đang kéo rơi xuống.
  • Nhấc tay lên, chạm lại thì chạy bình thường — cho đến lần giữ lâu tiếp theo.

Với ứng dụng cần giữ liên tục, đây không phải lỗi thẩm mỹ. Nó làm hỏng đúng thao tác quan trọng nhất, và làm hỏng vào đúng lúc căng nhất — cú drift dài ở khúc cua, pha đỡ đòn liên hoàn.

Vì sao chúng tôi không thấy nó trước

Thành thật: vì chúng tôi thử sai cách. Suốt giai đoạn dựng, việc kiểm tra dựa vào trình duyệt trên máy tính và một trình duyệt chạy tự động. Ở đó, “giữ” là giữ chuột, hoặc là một lệnh giả lập thao tác — không hệ điều hành nào chen vào để hỏi “bạn có muốn chọn chữ không?”. Trong ghi chú kỹ thuật của Thỏ Dâu, chúng tôi còn ghi rõ một dòng: chưa thử cảm giác chạm trên iPhone thật. Tức là chúng tôi biết mình chưa thử, và vẫn phát hành.

Đó là cái sai đáng nói hơn cả bản thân lỗi. Lỗi trình duyệt thì ai làm web cũng gặp; biết mình có vùng mù mà không ưu tiên lấp nó mới là chuyện cần sửa trong cách làm việc.

Chuyện gì thật sự xảy ra bên trong Safari

Khi ngón tay chạm và giữ yên trên một vùng trang web, Safari đoán rằng bạn muốn chọn chữ hoặc mở menu nhấn giữ (sao chép, chia sẻ, lưu ảnh). Nó làm ba việc liên tiếp:

  1. Bắt đầu chọn nội dung, và vì trang của chúng tôi gần như chỉ có một khung vẽ lớn, “nội dung” là cả trang — nên cả trang chuyển xanh.
  2. Bật kính lúp để giúp đặt con trỏ chọn chữ.
  3. Quan trọng nhất: huỷ lượt chạm đang diễn ra đối với trang web. Trang nhận được tín hiệu “lượt chạm đã bị huỷ”, giống hệt như khi người dùng nhấc tay.

Phần điều khiển của chúng tôi, rất hợp lý, coi “lượt chạm bị huỷ” như “ngón tay đã nhấc lên”. Nên nút đang giữ được thả ra. Mã chạy đúng như thiết kế; chỉ là thiết kế không tính tới việc hệ điều hành cướp mất cú chạm giữa chừng.

Bản sửa: ba lớp, mỗi lớp một lý do

Cách sửa hay được chia sẻ trên mạng chỉ là thêm một dòng giao diện “không cho chọn chữ”. Dòng đó chặn được phần bôi xanh, nhưng không đảm bảo Safari thôi huỷ lượt chạm. Bản sửa của chúng tôi có ba lớp:

LớpLàm gìVì sao cần
Giao diệnTắt chọn chữ, tắt menu nhấn giữ và tắt ô sáng khi chạm cho toàn trang, khung vẽ và menuChặn phần lớn trường hợp bôi xanh và kính lúp
Sự kiện chọnChặn mọi lệnh “bắt đầu chọn” trên trang, trừ ô nhập chữLưới dự phòng cho những đường mà lớp giao diện bỏ sót
Cú chạm trên khung vẽChặn hành vi mặc định của trình duyệt khi ngón tay chạm và di trên khung vẽ, trong khi vẫn để phần điều khiển của ứng dụng nhận đủ tín hiệuKhông để Safari có cơ hội coi cú giữ là thao tác của nó — nên không còn huỷ lượt chạm

Lớp thứ ba là lớp làm cho lỗi biến mất hẳn. Có một chi tiết kỹ thuật nhỏ nhưng quyết định: trình duyệt hiện đại mặc định coi các bộ lắng nghe cú chạm là “chỉ nghe, không can thiệp” để cuộn trang cho mượt. Muốn chặn được, phải khai báo rõ là bộ lắng nghe có can thiệp. Bỏ sót khai báo này thì lệnh chặn bị lờ đi trong im lặng — không lỗi, không cảnh báo, và bạn sẽ tưởng mình đã sửa.

Cái không được chặn

Chặn chọn chữ cho cả trang thì dễ, nhưng chặn quá tay sẽ đẻ lỗi mới: ô nhập chữ — như ô đặt tên câu chuyện trong Thỏ Dâu hay ô đăng nhập — sẽ không đặt được con trỏ, không dán được chữ. Vì vậy mọi lớp chặn đều chừa ra ô nhập chữ và vùng soạn thảo. Đây là loại chi tiết mà bản sửa vội sẽ quên, rồi một tuần sau có người báo “không đổi được tên”.

Sửa xong chưa có nghĩa là người dùng đã nhận

Ứng dụng web có lợi thế lớn là không phải chờ kho ứng dụng duyệt: sửa xong, đưa lên máy chủ là xong phía chúng tôi. Nhưng ứng dụng của chúng tôi chạy được khi mất mạng, nhờ một tệp chạy nền cất sẵn toàn bộ mã trên máy người dùng. Tệp đó ưu tiên bản đã cất — nhanh, chạy cả khi không có sóng — và chính vì vậy, nếu không làm gì thêm, máy đã mở ứng dụng trước đó sẽ tiếp tục chạy bản có lỗi.

Chúng tôi từng dẫm vào hệ quả tệ hơn: máy người dùng lấy một nửa tệp mới, một nửa tệp cũ từ kho cất sẵn, ghép lại thành một phiên bản chưa từng tồn tại. Kết quả là những lỗi không tái hiện được ở đâu cả. Sau lần đó, mỗi tệp mã đều được gắn số phiên bản ngay trong đường dẫn nạp nó, và tệp chạy nền mang cùng số đó. Mỗi lần phát hành, một công cụ nhỏ tăng số này đồng loạt; máy người dùng thấy số mới thì bỏ toàn bộ bản cũ, tải trọn bản mới.

Lần sửa lỗi nhấn giữ này làm lộ thêm một điểm yếu của chính công cụ đó. Phần lõi dùng chung và từng ứng dụng trước đây dùng chung một số phiên bản; đổi lõi là phải đổi số ở mọi nơi cùng lúc, và chỉ cần sót một chỗ là trộn bản. Chúng tôi tách ra: lõi có số riêng, mỗi ứng dụng có số riêng, và công cụ tăng số hiểu được cả hai. Việc này không ai nhìn thấy, nhưng nó là lý do “sửa trong ngày” thật sự có nghĩa là “người dùng có bản sửa trong ngày”.

Dòng thời gian thật

  1. Nhận lời báo kèm mô tả rất cụ thể: “bôi xanh cả trang, nút bị nhả”.
  2. Sửa trong Thỏ Dâu trước — ứng dụng có mã riêng, nhỏ, dễ thử nhất.
  3. Bảy phút sau: đưa cùng cách sửa vào phần lõi dùng chung, năm ứng dụng còn lại nhận cùng lúc.
  4. Cùng lượt phát hành: tăng số phiên bản cho lõi và từng ứng dụng, để máy đã mở trước đó tự lấy bản mới ở lần mở kế tiếp.

Không có gì thần kỳ trong tốc độ đó. Nó đến từ hai quyết định kiến trúc có từ trước: dồn phần xử lý cú chạm vào một lõi dùng chung, và không phụ thuộc kho ứng dụng. Nếu mỗi ứng dụng tự viết phần điều khiển riêng, chúng tôi đã phải sửa năm lần — và gần như chắc chắn quên một lần.

Điều chúng tôi thay đổi sau lỗi này

  • Mọi thao tác giữ phải được thử trên iPhone thật, giữ lâu hơn mức bình thường, trước khi phát hành. Không có ngoại lệ “chỉ sửa nhỏ”.
  • Đối xử với “lượt chạm bị huỷ” như một tín hiệu đáng ngờ. Người dùng thật hiếm khi tạo ra nó; khi nó xuất hiện nhiều, thường là hệ điều hành đang chen vào.
  • Ghi vùng mù thành việc phải làm, không phải ghi chú. Dòng “chưa thử trên iPhone thật” nằm trong tài liệu đủ lâu để thành lỗi của người dùng.

Chúng tôi vẫn sẽ còn gặp những lỗi kiểu này. Trình duyệt trên điện thoại thay đổi theo từng bản cập nhật, và mỗi đời iPhone có vài thói quen riêng. Điều duy nhất chúng tôi hứa được là: khi bạn báo, chúng tôi đọc, và bản sửa sẽ đến máy bạn nhanh nhất có thể — không phải chờ ai duyệt.

Câu hỏi thường gặp

Vì sao nhấn giữ trên iPhone lại bôi xanh cả trang web?

Khi giữ ngón tay yên trên trang, Safari đoán bạn muốn chọn chữ nên bắt đầu bôi chọn và bật kính lúp. Với trang chỉ có một khung vẽ lớn, vùng bị chọn là cả màn hình. Trang web làm kỹ sẽ tắt hành vi này ở vùng điều khiển.

Tại sao đang giữ nút thì nút tự nhả ra trên iPhone?

Khi Safari chuyển sang chế độ chọn chữ, nó huỷ lượt chạm đang diễn ra đối với trang web. Ứng dụng nhận tín hiệu đó giống như lúc bạn nhấc tay, nên thả nút. Chặn hành vi chọn chữ trên vùng điều khiển là hết.

Ứng dụng web sửa lỗi xong thì bao lâu tôi mới nhận được?

Thường là ở lần mở kế tiếp khi có mạng. Ứng dụng cất sẵn bản cũ để chạy khi mất sóng, nên cần đóng hẳn rồi mở lại để nhận bản mới. Không cần vào kho ứng dụng cập nhật.

Chặn chọn chữ có làm mất khả năng gõ tên hay dán chữ không?

Không, nếu làm đúng. Các ứng dụng AppGiaiTri chỉ chặn chọn chữ ở khung vẽ và nút bấm, còn ô nhập chữ và vùng soạn thảo vẫn chọn, sao chép, dán bình thường.

Gặp lỗi trên iPhone thì báo cho AppGiaiTri thế nào cho nhanh sửa?

Hãy nói rõ ứng dụng nào, đang làm thao tác gì, và mô tả điều bạn thấy như “cả màn hình chuyển xanh” hay “nút tự nhả”. Một mô tả cụ thể như vậy thường đủ để chúng tôi tái hiện và sửa trong ngày.

Vì sao ứng dụng chạy tốt trên máy tính nhưng lỗi khi chạm trên điện thoại?

Trên máy tính, giữ chuột không kích hoạt chọn chữ hay kính lúp như giữ ngón tay trên iPhone. Nhiều lỗi cảm ứng chỉ xuất hiện khi thử trên máy thật, bằng ngón tay thật, giữ lâu hơn bình thường.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.