Веселье с пробелами нулевой ширины в WhatsApp

На Reddit или других форумах вы часто будете сталкиваться со спойлерами. Они используются для обсуждения спойлеров, защищая других читателей, которые не хотят, чтобы их испортили, требуя от них активного взаимодействия с тегом спойлера для просмотра его содержимого.

Примечательно, что теги спойлера отсутствуют в большинстве приложений для обмена мгновенными сообщениями, хотя кажется, что так же легко случайно испортить одно неосторожное сообщение в групповом разговоре:

К счастью, по крайней мере в WhatsApp мы можем эмулировать тег спойлера, воспользовавшись тем, что длинные сообщения скрыты за сгибом «Подробнее»:

Хотя это не похоже на это, сообщение выше имеет длину не менее 4000 символов. Между предупреждением о спойлере и фактическим текстом находится 4000 пробелов нулевой ширины: U+200B ZERO WIDTH SPACE в Unicode или ​ в HTML, достаточно, чтобы отображаемое сообщение было обрезано.

Вдохновение

Моя подруга Чжи Ан и я пришли к этой идее, когда обсуждали наши решения для прошлогоднего Пришествия кода — мы делали это в группе WhatsApp для нашей общей таблицы лидеров, но мы не хотели портить впечатления тем, кто нам, которым еще предстояло решить обсуждаемую проблему.

Демо

Каким бы находчивым он ни был, Джи Ан быстро продемонстрировал, что это возможно. Было немного неудобно вручную вставлять кучу пробелов нулевой ширины при составлении вашего сообщения, поэтому мы сделали простой демонстрационный веб-сайт для создания сообщения-спойлера WhatsApp, которое вы могли скопировать и вставить:



Как это работает

function createSpoilerMessage() {
  var warning = document.getElementById('warning').value;
  var content = document.getElementById('content').value;
  var message = warning + ' ' + '\u200B'.repeat(4000) + content;
  document.getElementById('message').value = message;
}

После настройки отображения предупреждения о спойлере перед спойлером (warning) и фактического содержимого спойлера (content) мы добавляем 4000 пробелов нулевой ширины (для безопасности — около 3100 кажется достаточным для WhatsApp Web, но нужно больше). на мобильном телефоне) между ними и отображать результат для копирования пользователем.

Предостережения

Однако у этого хака есть некоторые побочные эффекты.

Во-первых, добавление 4000 пробелов нулевой ширины делает длину сообщения более 4000 символов. На самом деле, поскольку пробел нулевой ширины кодируется в UTF-8 как 3 байта (E2 80 8B), сообщение с тегом спойлера может фактически иметь размер больше 12 КБ! На самом деле это вызывает неожиданное поведение в WhatsApp, например, обрезание истории сообщений или просто общее замедление.

Кроме того, в WhatsApp Web спойлер по-прежнему отображается в превью чата:

(По крайней мере, кажется, что он правильно скрыт в веб-уведомлениях, а также в превью и уведомлениях мобильного чата.)

К счастью, обходной путь для этого — просто сделать баннер спойлера достаточно длинным, чтобы перекрыть превью чата:

Последние мысли

Хотя это было то, что мы сделали в конце прошлого года, так как Мстители: Война бесконечности только недавно вышел в кинотеатрах, и это относительно тяжелый сюжет для фильма Marvel, я подумал, что сейчас самое время напишите об этом.

На самом деле я не уверен, есть ли какие-либо приложения для обмена мгновенными сообщениями, которые изначально поддерживают теги, хотя, пока я искал, я нашел некоторых людей, которые создали ботов для Slack и Telegram, чтобы скрыть спойлеры:

Первоначально опубликовано на blog.jiayu.co.