Запись результатов поиска в БД на динамическую (возможно угловую) страницу через расширение - PullRequest
0 голосов
/ 25 декабря 2018

Для начала я бы хотел отметить, что я полный нуб, поэтому, пожалуйста, прости меня, если это глупый вопрос.Я работал над этим пару дней и не нашел в Интернете ничего, что помогло бы решить эту конкретную проблему.

Вот что я пытаюсь сделать:

Скажите, что пользователь просматривает сайт, на котором отображаются номера деталей и информация.Каждый раз, когда пользователь нажимает что-то с сайта, сайт загружает новую информацию и URL-адрес изменяется.Затем расширение извлекает UID (уникальный идентификатор) из URL-адреса и ищет в базе данных этот UID.Если UID найден в базе данных, сообщение возвращается к расширению.Отсюда, я хотел бы написать div на странице со словами «Эта часть уже найдена в базе данных».

Проблема здесь в том, что страница меняется, но это не новая страница ... это просто новая информация. Я могу получить расширение для записи на страницу при начальной загрузке , но когда страница меняется, ничего не пишется.

Вот соответствующий код, который я использую:

Манифест

{
  "manifest_version": 2,
  "name": "My Extension",
  "version": "1.0",
  "description": "An extension to write to a page",
  "icons": {
      "128": "icon128.png",
      "48": "icon48.png",
      "16": "icon16.png"
  },
  "browser_action": {
      "default_icon": "icon16.png",
      "default_popup": "popup.html"
  },
  "background": {
    "scripts":["./js/jquery.min.js","./js/extension-check.js"]
  },
  "content_scripts": [{
    "js": ["./js/jquery.min.js","./js/extension-content.js"],
    "matches": ["https://www.example.com/*"]
  }],
  "permissions": [
    "activeTab",
    "tabs",
    "http://*/*",
    "https://*/*"
  ]
}

Popup.html ничего не делает, но дает некоторые кнопки, которыеПользователь может нажать и перейти на некоторые сайты.У него нет соответствующего кода.

extension-check.js

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
        if (tabs === undefined || tabs[0] === undefined) return;

        var url = tabs[0].url;

        if (url.indexOf("example.com/specific-directory") > 0) {
            var part_url = // get part of the url
            var search_url = 'myexample.com/searching?' + part_url;

                $.ajax({
                    url: search_url,
                    type: 'post',
                    dataType: 'JSON',
                    success: async function(data, textStatus, jqXHR)
                    {
                        if (Object.keys(data).length != 0 && data.constructor != Object) {
                            // Because this script is running in the 
                            // background, I need to send the command to 
                            // something that has permissions to write to the page
                            chrome.tabs.executeScript(tabId, {
                                file: './js/extension-content.js'
                            }, function() {
                                 chrome.tabs.sendMessage(tabId, {parameter: data});
                            });
                        }
                    },
                    error: function(jqXHR, textStatus, errorThrown)
                    {
                        console.log(jqXHR);
                        console.log(textStatus);
                        console.log(errorThrown);
                    }
                });
            }
        }
    });
});

extension-content.js

(function() {
    chrome.runtime.onMessage.addListener(function(message) {
        var receivedParameter = message.parameter;

        alert ("In this - " + receivedParameter);
        $(".core").prepend("<div>This is a test - " + receivedParameter + "</div>");
    });

})();

ПРИМЕЧАНИЕ: Если я изменю эту страницу на:

$(document).ready(function() {
   $(".core").prepend("<div>This is a test</div>");
});

Div записывается на страницу.Но это записывается на страницу один раз и никогда не меняется и не исчезает.Это будет отображать неверную информацию.

Ajax работает отлично ... Предупреждение (только для теста) отображается и отображается с переданным параметром.Однако НИЧЕГО не написано на странице.

Может кто-нибудь помочь мне?Кроме того, если у меня что-то не так в манифесте (например, разрешения), я буду в восторге от некоторых отзывов.Опять же, noob в этом, поэтому я, возможно, добавил, что мне не нужно, или у меня нет вещей, которые мне действительно нужны.

Заранее спасибо.

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