Как вызвать функцию расширения Chrome после перенаправления страницы? - PullRequest
0 голосов
/ 08 января 2020

Я работаю над созданием Javascript (в браузере) бота Instagram. Однако я столкнулся с проблемой.

Если вы запустите этот скрипт, будет вызвана первая функция, и страница будет перенаправлена ​​на «https://www.instagram.com/explore/tags/samplehashtag/», а вторая функция будет вызвана сразу после (по предыдущему URL до того, как страница изменится на новый URL). Есть ли способ заставить вторую функцию вызываться после полной загрузки второго URL?

Я пытался установить его для метода Window setInterval () в течение длительного периода времени, window.onload и нескольких других методов. Тем не менее, я не могу заставить что-либо работать. Есть ли шанс, что у кого-то есть решение?

Это мое первое расширение chrome и мой первый настоящий проект, поэтому я могу упустить что-то простое ..

манифест. json

    {
  "name": "Inject Me",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Injecting stuff",
  "homepage_url": "http://danharper.me",
  "background": {
    "scripts": [
      "background.js"
    ],
    "persistent": true
  },
  "browser_action": {
    "default_title": "Inject!"
  },
  "permissions": [
    "https://*/*",
    "http://*/*",
    "tabs"
  ]
}

inject . js

  (function() {

  let findUrl = () => {
    let hashtag = "explore/tags/samplehashtag/";
    location.replace("https://www.instagram.com/" + hashtag);
  }

  findUrl();
})();

background. js

    // this is the background code...

// listen for our browerAction to be clicked
chrome.browserAction.onClicked.addListener(function(tab) {
  // for the current tab, inject the "inject.js" file & execute it
  chrome.tabs.executeScript(tab.ib, {
    file: 'inject.js'
  });

});

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {

  chrome.tabs.executeScript(tab.ib, {
    file: 'inject2.js'
  });


});

inject2. js

(function() {

if (window.location.href.indexOf("https://www.instagram.com/explore/tags/samplehashtag/") != -1){
  let likeAndRepeat = () => {
    let counter = 0;
    let grabPhoto = document.querySelector('._9AhH0');

    grabPhoto.click();

    let likeAndSkip = function() {
      let heart = document.querySelector('.glyphsSpriteHeart__outline__24__grey_9.u-__7');
      let arrow = document.querySelector('a.coreSpriteRightPaginationArrow');

      if (heart) {
        heart.click();
        counter++;
        console.log(`You have liked ${counter} photographs`)
      }
      arrow.click();
    }

    setInterval(likeAndSkip, 3000);
    //alert('likeAndRepeat Inserted');
  };

  likeAndRepeat();

}
})();

1 Ответ

1 голос
/ 08 января 2020

Из вопроса и примера не ясно, когда вы хотите запустить свою функцию. Но в расширении chrome есть нечто, называемое Передача сообщений

https://developer.chrome.com/extensions/messaging

При передаче сообщений вы можете передавать сообщения из одного файла в другой и аналогичным образом слушайте сообщения. Как видно из вашего варианта использования, вы можете прослушать конкретное сообщение и затем запустить свой метод.

Например,

background.js

chrome.runtime.sendMessage({message: "FIRE_SOME_METHOD"})


popup.js

    chrome.runtime.onMessage.addListener(
    function(request) {

    if (request.message == "FIRE_SOME_METHOD")
      someMethod();
  });

РЕДАКТИРОВАТЬ Также, если вы хотите чтобы прослушать изменения URL, вы можете просто поставить слушателя, как указано в документации .

  chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
      console.log('updated tab');
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...