Avoid Yandex Turbo

Redirect directly to target page avoiding Yandex Turbo

目前為 2020-11-19 提交的版本,檢視 最新版本

// ==UserScript==
// @name Avoid Yandex Turbo
// @name:ru Обход Яндекс Турбо
// @description Redirect directly to target page avoiding Yandex Turbo
// @description:ru Переадресация на целевую страницу в обход Яндекс Турбо
// @author Autapomorph
// @version 2.0.0
// @run-at document_start
// @match *://yandex.ru/*
// @match *://*.turbopages.org/*
// @supportURL https://github.com/Autapomorph/userscripts/issues
// @license MIT
// @namespace https://greasyfork.org/users/689919
// ==/UserScript==

(function () {
  function redirectWithTurboOverlay() {
    var titleHostActive = $('.turbo-overlay__title-host_active');
    if (!titleHostActive || !titleHostActive.length) {
      return;
    }

    
    var titleHostActiveText = titleHostActive[0].textContent;
    if (!titleHostActiveText.length) {
      return;
    }

    var hostLinks = $('a[data-sc-host]');
    for (var i = 0; i < hostLinks.length; i += 1) {
      var hostLink = $(hostLinks[i]);
      
      var dataCounter;
      try {
        dataCounter = JSON.parse(hostLink.attr('data-counter'));
      } catch (error) {
        return;
      }

      if (dataCounter.find(e => e.indexOf(titleHostActiveText) > -1)) {
        var redirect;
        if (dataCounter[0] === 'b') {
          redirect = dataCounter[1];
        } else if (dataCounter[0] === 'w') {
          redirect = dataCounter[3];
        } else {
          return;
        }
        
        top.location.replace(redirect);
      }
    }

    $('a[data-sc-host]').each(function () {
      var dataCounterAttr = $(this).attr('data-counter');
      if (!dataCounterAttr) return;

      var dataCounter = JSON.parse(dataCounterAttr);
      if (dataCounter.find(e => e.indexOf(titleHostActiveText) > -1)) {
        var redirect;
        if (dataCounter[0] === 'b') {
          redirect = dataCounter[1];
        } else if (dataCounter[0] === 'w') {
          redirect = dataCounter[3];
        }
        top.location.replace(redirect);
      }
    });
  }

  function redirectWithURL() {
    var urlPathname = top.location.pathname;
    var turboIndex = urlPathname.indexOf('/turbo/');
    var delimeterIndex = urlPathname.search(/\/(s|h)/);
    var delimeterLength = 2;

    if (delimeterIndex < 0) {
      return;
    }
    
    var host =
      turboIndex === -1
        ? urlPathname.substring(1, delimeterIndex)
        : urlPathname.substring(turboIndex + '/turbo/'.length, delimeterIndex);
    var pathName = urlPathname.substring(delimeterIndex + delimeterLength);
    top.location.replace('//' + host + pathName);
  }

  var urlPathname = top.location.pathname;
  if (/\.*\/(s|h)\/.*/.test(urlPathname)) {
    redirectWithTurboOverlay();
    redirectWithURL();
  }
})();