Chrome Расширение: Javascript вводится из фона. js на вкладку продолжает работать, даже если вкладка перезагружается. Как заставить впрыснутый javascript запускаться только один раз? - PullRequest
0 голосов
/ 20 апреля 2020

В своем расширении я создаю новую вкладку с URL из скрипта background.js. И по завершении загрузки страницы я вставляю файл Javascript с именем addAlias.js на эту вкладку, который будет выполнять некоторые задачи и нажимать кнопку отправки.

Проблема заключается в том, что после нажатия кнопки отправки страница на вкладке нажимается изменяется, но внедренные сценарии снова запускаются.

Я хочу запустить его только один раз, когда вкладка создается впервые.

Вот мой код:

манифест. json

{
    "manifest_version":2,
    "name":"Extension Name",
    "description":"This extension description",
    "version":"1.0.0",
    "icons":{"128":"icon_128.png"},
    "browser_action":{
        "default_icon":"icon.png",
        "default_popup":"popup.html"
    },
    "permissions":["activeTab", "background", "tabs", "http://*/*", "https://*/*"],
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    }
}

фон. js

chrome.tabs.query({active:true},function(tabs){
  chrome.tabs.create({url : tabURL}, function(tab){
    addPageCompleteListener(tab); //Passing tab to add listener if the tab loading completed or not.
  });
});

function addPageCompleteListener(tabOpened){
  chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (tabId==tabOpened.id){
      if (changeInfo.status == 'complete') {
        // It means Page has completely loaded
        //Now injecting Js script file
        chrome.tabs.executeScript(tabOpened.id, {file: 'addAlias.js'});
        chrome.tabs.executeScript(tabId,{code:'console.log("addAlias.js loaded");'})
      }
    }
    });
}

addAlias. js

//Some other code
let add_alias_btn = document.getElementById('SubmitYes'); //Selecting submit button
/*
Some tasks
*/
add_alias_btn.click(); //Clicking the submit button

1 Ответ

1 голос
/ 20 апреля 2020

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

chrome.tabs.create({url: tabURL}, function(tab){
    //by default, content scripts are loaded after page has finished loading
    chrome.tabs.executeScript(tab.id, {file: 'addAlias.js'}, function(){
        chrome.tabs.executeScript(tab.id, {code:'console.log("addAlias.js loaded");'});
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...