Обсуждение участника:Incnis Mrsi/clinks.js

Материал из Lurkmore
Перейти к навигации Перейти к поиску
var link = document.getElementsByTagName('a')[0];
console.log("First link host: " + link.hostname); // link.host := domain[":" + port], а link.hostname порт не содержит
console.log("Current host: " + location.hostname);
И что даст извлечение hostname методами DOM? Мне же важно отсеять уже имеющиеся относительные ссылки (какие генерирует, например, тэг <ref>) чтобы не трогать их. Тронешь — сломается; я же тестировал. — Incnis Mrsi 12:14, 27 марта 2016 (MSK)
В href всегда полный путь лежит, если хочешь как есть, то нужно link.getAttribute("href"). Ты вообще что-то непонятное делаешь. По всей видимости скоро Абсолютное Зло выберется на свободу, и в мире воцариться Тьма.
@Навальнобот: Ещё раз, чем плох мой код? Не работает в некоторых браузерах? — отлично, вот ты и объяснишь, как исправить. Слишком много проверок? — сам поставь эксперимент: попробуй перезаписать href в ссылке, созданной <ref>ом. Что ты предлагаешь делать? Забить на переопределение ссылок на страницах и сосредоточиться на исправлении их редактором? — Incnis Mrsi 13:11, 27 марта 2016 (MSK)
ты просто заменяешь нерабочие ссылки ведущие на адреса тип http://lurkmore.to/Хуй на рабочие (домен подменяешь). Я к тому что не нужно там ссылку регуляркой разбивать на части и что-то делать. Твою громоздкую конструкцию можно так переписать:
addOnloadHook(function() {
  var links = document.getElementsByTagName('a');
  for (var i = 0; i < links.length; ++i) {
    var link = links[i];
    if (/^(?:www\.)?lurkmore\.[a-z]{2,}$/.test(link.hostname)) {
      if (link.protocol == "https:") {
        link.protocol = "http:";
      }
      link.hostname = location.hostname;
    }
  }
});
Тогда ответь на такой вопрос. Лично у меня работает http://lurkmore.to/⁠, но не работает https://lurkmore.to/⁠. Можешь назвать меня ламером, но это — пример из жизни, а не умозрительные рассуждения. Твой вариант меняет в https-варианте link.hostname на тот же самый, и… PROFIT? — Incnis Mrsi 14:02, 27 марта 2016 (MSK)
это как пример if (link.protocol == "https:") link.protocol = "http:";
А если наоборот, конечный пользователь боится голого HTTP как чумы? Вот нафига ты придираешься к моему стилю и якобы неэффективности? Я зато продумал вещи, о которых ты впервые услышал вчера. Лучше б поискал дефекты в самой концепции, или хотя бы баги. — Incnis Mrsi 14:19, 27 марта 2016 (MSK)
> о которых ты впервые услышал вчера :-D. если хочешь, чтобы твоим скриптом пользовались другие, делай расширение. мне вот лень даже разбираться как оно все работает
Ну наконец-то какой-то конструктив. Для Mozilla — расширение, для Google Chrome — расширение, для Opera — расширение, для IE — расширение… да я спасибо скажу тому, кто сделает для этих браузеров штучку, запускающую один оператор «importScript('user:Incnis_Mrsi/clinks.js');» на всех доменных именах Лурка. Но вот самому заниматься этим для нескольких безразличных мне браузеров? Извините, не интересно. — Incnis Mrsi 15:11, 27 марта 2016 (MSK)
Вообще-то у всех стоит Хром. А всякие Яндекс браузеры и Оперы созданы на основе движка Хромиум, т.е. расширения для хрома будут работать в них.
Opera сделана на основе гуглодвижка? Вот это открытие. И отучаемся говорить за всю сеть, заодно. — Incnis Mrsi 13:11, 28 марта 2016 (MSK)


Переопределение ссылок

Как вариант, можно ограничиться лишь элементами <a… class="external …">, чтобы при отборе кандидатов не связываться с извращениями от getAttribute(). Только смысл работать над этим, если скрипт никому кроме меня не будет нужен? — Incnis Mrsi 13:25, 27 марта 2016 (MSK)