1

У меня есть этот код, который работал до недавнего времени, не знаю почему, но я думаю, что это потому, что есть 2 ссылки с тем же именем класса.Как найти и щелкнуть ссылку на основе букв/слов, которые она содержит

Это как код изначально выглядел -

if (tweet[0].match(theName) == theName) { 
     document.getElementsByClassName("twitter-timeline-link")[0].click(); 
     tFunction = "get outa here"; 
     theName = " 4444 4 456 7 8 456 7 345 7 345 345 3 1 1 133s "; //buffer to jump out of interval loop 

    } 

Это как мой код выглядит сейчас, его часть функции, которая сканирует и обновить до величины не совпадают, так что я могу после этого нажмите на ссылку - -

if (tweet[0].match(theName) == theName) { 
     document.getElementsByClassName("twitter-timeline-link").find("a:contains('swoo.sh')").bind('click', function() { 
      window.location.href = this.href; 
      return false; 
     }).trigger('click'); 
     tFunction = "get outa here"; 
     theName = " 4444 4 456 7 8 456 7 345 7 345 345 3 1 1 133s "; //buffer to jump out of interval loop 

    } 

проблема заключается в том Theres обычно 2 ссылки, и неправильная ссылка заканчивает тем, что щелкнул, так Im ищет способ, чтобы соответствовать часть текста из ссылки, что я хочу его (т.е. swoo.) нажмите кнопку.

Я пытался использовать другой код, но мне нужно было вставлять библиотеку jquery (из-за $), которую я не могу сделать/не хочу, потому что это расширение хром.

Любая идея о том, как ее исправить? Спасибо

ответ

1

Ваш второй блок кода использует jQuery в любом случае (в случае, если вы не заметили).

Что касается первого кодового блока (и отложить в сторону тот факт, что я понятия не имею, что это такое tFunction и theName являются для), вы можете изменить его следующим образом:

if (tweet[0].match(theName) == theName) { 
    [].slice.call(document.querySelectorAll('a.twitter-timeline-link')) 
     .some(function(elem) { 
     if (elem.textContent.indexOf('swoo.sh') > -1) { 
      elem.click(); 
      return true; 
     } 
     return false; 
    }); 
    tFunction = ...; 
    theName = ...; 
} 

UPDATE :

Используя расширение примера ниже, я смог получить мою ссылку нажатой :) Он перезагружает страницу каждую секунду, пока не найдет спецификацию fied shoe-entry, тогда он ищет правильную ссылку (содержащую «swoo.sh») и нажимает на нее.

UPDATE 2:

Оказалось, некоторые динамического манипулирования DOM вызывало противоречивое поведение, когда была задержка в сетевом соединении. Я внес некоторые изменения в код, чтобы учитывать атрибуты элемента (на которые не влияет динамическое создание элементов DOM и обеспечивает повышенную согласованность). Фактически, я не смог воспроизвести какую-либо несогласованность после того, как попробовал дюжину раз (это был не случай с предыдущим подходом).

content.js:

var shoeName = ...; 
var tweets = new Array(); 

function twitterScan() { 

    tweets = [].slice.call(document.getElementsByClassName("js-tweet-text")); 

    var targetLink = null; 
    var foundTweet = tweets.some(function(tweet) { 
     if (tweet.innerHTML.indexOf(shoeName) !== -1) { 
      var foundLink = [].slice 
        .call(tweet.querySelectorAll('a.twitter-timeline-link')) 
        .some(function(el) { 
       if (el.dataset.expandedUrl.indexOf('swoo.sh') !== -1) { 
        targetLink = el; 
        return true; 
       } 
       return false; 
      }); 
      if (!foundLink) { 
       alert('Found ' + shoeName + ', but couldn\'t find the link :('); 
      } 
      return true; 
     } 
     return false; 
    }); 

    if (targetLink) { 
     window.open(targetLink.href); 
    } else if (!foundTweet) { 
     location.reload(true); 
    } 
} 

setTimeout(twitterScan, 1000); 

manifest.json:

{ 
    "manifest_version": 2, 

    "name": "Test Extension", 
    "version": "0.0", 
    "offline_enabled": false, 

    "content_scripts": [{ 
     "matches": ["*://some.domain.com/*"], 
     "js":   ["content.js"], 
     "run_at":  "document_end", 
     "all_frames": false 
    }] 
} 
+0

да, я знаю, что с помощью JQuery, но когда я пытаюсь использовать '$' или 'JQuery' Я бегу в проблему включения библиотеки jquery с моим расширением. Я пробовал использовать код и получать эту ошибку - Uncaught SyntaxError: Неожиданный идентификатор – user3089477

+0

Вы пробовали мой код и получили ошибку? В какой строке/столбце? Вы заменили «...» на фактические значения? – gkalpak

+0

Да, я заменил ... значениями. И это не говорит мне в консоли, какую строку. – user3089477

Смежные вопросы