2017-03-26 35 views
1

基本上,當我在做的Yandex a search,我得到的是這樣的:變化`href`s通過`onmousedown`,`click`事件鏈接

pic

但是,當我右鍵單擊並複製鏈接時,我沒有得到真正的鏈接,但是垃圾郵件(在重定向到我想要的鏈接前跟蹤我的點擊功能的中間件) 。

我試圖編寫一個腳本,刪除這些垃圾鏈接。這是我已經試過:

function decodeURL(str) { 
    return decodeURIComponent((str+'').replace(/\+/g, '%20')); 
} 

function getRealLinks() { 
    var classes = document.getElementsByClassName('organic typo typo_text_m typo_line_s'); // gets any search result 

    var cleanLinks = new Array(); // we'll store any clean link to this array 

    for (i = 0; i < classes.length; i++) { 
     var html = classes[i].innerHTML; // we get part of the inner html of the selected search result 
     var pattern = /(url=(.*?))(?=&amp;\w+=)/; // with this regex we'll match the url 
     var match = pattern.exec(html); // attempt matching pattern 
     cleanLinks.push(decodeURL(match[2])); // decode the url, then push the match to the array 
    } 

    console.log(cleanLinks); 
} 

function bindEventListeners() { 
    var lis = document.getElementsByTagName('li'); // search results have `li` selector 

    for (var i = 0; i < lis.length; i++) { // iterate every element 
     (function(i) { 
     lis[i].addEventListener('click', function() { // add a listener to the current element 
      alert(this.dataset.cid); // each result has an id (by default between 0-9) 
     }, false); 
     })(i); 
    } 
} 

bindEventListeners(); 

getRealLinks()給了我正確的鏈接,但我不知道現在如何「進步」與乾淨的鏈路替代href S上的搜索結果。

bindEventListeners()當它被調用時,綁定在搜索結果正文部分實現點擊時將觸發的偵聽器。點擊搜索結果的id對我有用,只是讓鏈接偏離我需要的鏈接。例如,用戶點擊搜索結果索引3,我會做var search_3 = getRealLinks()[3]

我該如何替換那些可以在JavaScript中看到的乾淨鏈接?

+0

我試過份的[驗證碼](https://github.com/Rob--W/dont-track-me-google/blob/master/contentscript.js)也一樣,但它甚至不工作。 – WayneXMayersX

+0

僅供參考:[Google搜索鏈接修復](https://chrome.google.com/webstore/detail/google-search-link-fix/cekfddagaicikmgoheekchngpadahmlf):適用於Google和Yandex。適用於Chrome和Firefox。 – Makyen

回答

2

附上mousedown聽者上window,最上面的DOM對象,並指定爲trueaddEventListener將useCapture參數在捕獲階段的一開始從window到點擊目標截獲該事件。也就是說,我們的代碼將在目標的onmousedown之前運行。

// ==UserScript== 
// @name  Defluff yandex links 
// @include *://yandex.*/* 
// ==/UserScript== 

window.addEventListener('mousedown', event => { 
    const a = event.target.closest('a'); 
    if (a) { 
     a.onmousedown = null; 
    } 
}, true); 
+0

我一直在尋找這樣的東西。這也適用於Google。 – Ouroborus