data-lynx-uri ссылки на фейсбуке

740
David

Я давно заметил, что ссылки, которые публикуются на Facebook, каким-то образом обрабатываются извращенно. Если навести курсор мыши на ссылку или предварительный просмотр страницы, в моем браузере (в данном случае Safari для Mac) отобразится ожидаемая ссылка, которая была вставлена ​​в сообщение (например, http://www.example.com/). НО, если я щелкну правой кнопкой мыши и скопирую ссылку, а затем вставлю ее в адресную строку новой вкладки, URI будет совсем другим: это будет что-то вроде того, https://l.facebook.com/l.php?u=http%3A%2F%2Fwww.example.com%2F&h=xxxxxгде xxxxна самом деле уникальный идентификатор, без сомнения связанный с моей учетной записью, и все остальное. Я предполагаю, что Facebook использует это, чтобы отследить, что люди нажимают. Мне интересно, пытаются ли они «скрыть» этот факт, используя схему, в которой браузер не показывает эффективную отслеживающую ссылку. Я посмотрел на источник HTML, и это выглядит какahrefатрибут, но тогда у него есть два дополнительных атрибута, data-lynx-modeсо значением origin(из того, что я видел, могут быть и другие) иdata-lynx-uriкоторая содержит ссылку, которая фактически копируется и отслеживается при взаимодействии с пользователем, ту, о которой я упоминал выше. Я сделал быстрый поиск в сети и не смог найти много документации об этих атрибутах - но они, кажется, в основном, если не только используются в связи со ссылками на Facebook - хотя браузер, кажется, реагирует определенным образом на они как-то противоречивы, потому что то, что он показывает в строке состояния, отличается от того, что он копирует в буфер обмена. У кого-нибудь есть больше информации о них? Могут ли они быть проприетарными и использоваться каким-то кодом JavaScript, который переопределяет обычную ссылку, следующую за? Могут ли они быть "проигнорированы", чтобы браузер перешел по правильной ссылке и не использовал профилирующий компьютер Facebook?

Спасибо за ваши идеи!

РЕДАКТИРОВАТЬ :

Ответ Стаху работает хорошо (используя Tampermonkey для Safari, при переходе по ссылке я перенаправляюсь прямо на исходную страницу), однако этого недостаточно для моего конкретного использования: я использую разные браузеры для Facebook и общего просмотра (назовите это паранойей) ), и я обычно копирую ссылку из Safari и открываю ее в другом браузере. При щелчке правой кнопкой мыши и выборе «Копировать ссылку» в Safari по-прежнему отображается ссылка отслеживания, а не действительная href. Я пытаюсь выяснить, что происходит, когда я делаю это, возможно, какой-то javascript ловит действие и искажает ссылку, или Safari по умолчанию копирует это, data-lynx-uriкогда оно присутствует ??

РЕДАКТИРОВАТЬ 2 :

Facebook выполняет жонглирование ссылкой, изменяя значение hrefатрибута на содержимое, data-lynx-uriкогда происходит щелчок правой кнопкой мыши, и возвращая его исходное значение, когда вы наводите курсор на элемент - мне действительно кажется, что они « просто пытаемся запутать дисплей и обмануть пользователя, чтобы он не видел перенаправление. Я пытаюсь поймать щелчок правой кнопкой мыши и восстановить значение ссылки, используя javascript / Tampermonkey, но по какой-то причине моя функция не вызывается: - |.

document.addEventListener('contextmenu', function(e) { Array.from(e.target.attributes).filter(attribute => attribute.name.startsWith("data-lynx-")).forEach(attribute => e.target.removeAttribute(attribute.name)); var href = e.target.getAttribute("href"); var regex = /^https:\/\/l\.facebook\.com\/l\.php\?u=(http.*?)&.*$/; var match = regex.exec(href); if(match[1]) { var uri = match[1].replace(/%3A/g, ':').replace(/%2F/g, '/').replace(/%26/g, '&').replace(/%3D/g, '=').replace(/%3F/g, '?'); e.target.setAttribute("href", uri); } }, false); 
1

1 ответ на вопрос

0
stachu

Вы можете добавить свои собственные сценарии на сайт Facebook, используя, например, Greasemonkey, если вы используете FireFox.

Пример скрипта, который срабатывает при каждом клике

document.addEventListener('click', event => { let target = event.target;  if (target.tagName.toLowerCase() === "a") { Array.from(target.attributes).filter(attribute => attribute.name.startsWith("data-lynx-")).forEach(attribute => target.removeAttribute(attribute.name)); } }) 

Если целевой элемент (который вы щелкнули) является ссылкой ( aтегом), скрипт удаляет data-lynx-*атрибуты.

Вы должны проверить, что некоторые скрипты имеют hrefатрибут, измененный на ссылки отслеживания Facebook (домен l.facebook.com), и добавить этот случай в свой скрипт.

Вы должны убедиться, что этот скрипт работает даже с добавленным контентом AJAX.

Похожие вопросы