Как мне автоматически сохранять URL-адреса в расширении Google Chrome, когда пользователь посещает определенный сайт c? - PullRequest
1 голос
/ 17 июня 2020

Я новичок в веб-программировании, но не в программировании в целом. Я пытаюсь создать расширение Google Chrome, которое будет автоматически сохранять URL-адрес всякий раз, когда пользователь посещает любую страницу на StackOverflow.com. Затем я хотел бы отобразить список URL-адресов во всплывающем окне расширения.

Пока что я решил, что мне нужно расширение Page Action, потому что я хочу, чтобы оно было активным только на страницах StackOverflow. Я понимаю различные способы доступа к вкладкам и их URL-адресам, но не знаю, где разместить код.

Например, я не уверен, нужен ли мне сценарий содержимого и / или фоновый сценарий. Я также очень запутался в слушателях и в том, нужно ли мне отправлять сообщения между сценарием содержимого и страницей события или сценарием всплывающего окна. Вот что у меня есть:

manifest. json

  "manifest_version": 2,
  "name": "Stack Overflow visit history",
  "version": "1.0",
  "description": "This Chrome extension stores your Stack Overflow URL visits.",
  "icons": {
    "128": "icon128.png",
    "48": "icon48.png",
    "16": "icon16.png"
  },
  "page_action": {
      "default_icon": "icon16.png",
      "default_popup": "popup.html",
      "default_title": "StackOverflowVisits"
  },
  "background": {
      "scripts": ["eventPage.js"],
      "persistent": false
  },
  "content_scripts": [
      {
          "matches": ["https://stackoverflow.com/*"],
          "js": ["content.js", "jquery-3.5.1.min.js"]
      }
  ],
  "permissions": [
    "webNavigation",
    "tabs",
    "https://stackoverflow.com/*"
  ]
}

всплывающее окно. html

<html>
  <head>
      <title>Stack Overflow Visit History</title>
      <style>
        body {min-width: 250px;}
      </style>
      <script src="jquery-3.5.1.min.js"></script>
      <script src="popup.js"></script>
  </head>
  <body>
    <h2>StackOverflowVisits</h2>
    <div id="newUrlList"></div>
  </body>
</html>

всплывающее окно. js

  var tabUrl = tabs[0].url;
  chrome.storage.local.get({'urlList':[]}, function(item){
    var newUrlList = item.urlList;
    if (newUrlList.indexOf(tabUrl) === -1) {
      newUrlList.push(tabUrl);
    }
    console.log(newUrlList);
    chrome.storage.local.set({urlList: newUrlList});
  });
});

содержимое. js

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
       chrome.extension.getBackgroundPage().console.log(tab.url);
       chrome.storage.sync.set({tabId : tab.url})
});

1 Ответ

0 голосов
/ 17 июня 2020

Скрипты содержимого не могут получить доступ ко всем API расширений, у них нет доступа к chrome.tabs.onUpdated ( подробнее ).

В этом случае вам не нужен сценарий содержимого , вы можете добавить этого слушателя в фоновый скрипт, этот скрипт работает все время, пока браузер открыт, если он не установлен на persistent: false.

О взаимодействии между контекстами: в этом случае, если вы есть только фоновый сценарий и всплывающее окно, вы можете получить доступ к фоновому сценарию из всплывающего окна, используя chrome.extension.getBackgroundPage(), или вы можете просто сохранить данные в хранилище в фоновом скрипте и загрузить их из хранилища при открытии всплывающего окна. Если вы ищете обновления в реальном времени, вы можете использовать порт связи или схему запроса / ответа ( подробнее ).

Я не знаю, сделали ли вы это уже потому что вы не поделились содержимым фонового скрипта (eventPage.js), но для того, чтобы показать действие страницы на определенных c страницах, вам необходимо зарегистрировать его, вы можете узнать больше об этом здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...