2

Я давно заметил, что ссылки, которые публикуются на 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 и это выглядит как тег использует правильный URI в качестве атрибута a но у него есть два дополнительные атрибуты, href со значением data-lynx-mode (от того, что я видел, там может быть другими) и origin который содержит ссылку, которая фактически копируется и сопровождается при взаимодействии с пользователем, ту, которую я упомянул выше. Я сделал быстрый поиск в сети и не смог найти много документации об этих атрибутах - но они, кажется, в основном, если не только используются в связи со ссылками на 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

Вы можете добавить свои собственные сценарии на сайт 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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .