0

Я пытаюсь разработать расширение chrome, которое анализирует данные с текущей вкладки и отправляет их на URL-адрес, который обрабатывает данные. В некоторых случаях страница может потребоваться перенаправить, чтобы присутствовали определенные параметры получения. Мой popup.js может успешно выполнить перенаправление, но мне нужно нажать на расширение второй раз, чтобы заставить его работать правильно. Примечание: он работает правильно, если страница имеет правильные параметры. Как я могу настроить это так, чтобы код повторно запускался после перенаправления и помещал новый источник в указанный URL.Расширение Chrome - сценарий расширения повтора после перенаправления текущей вкладки

Вот мой popup.js:

var url = ""; 
chrome.runtime.onMessage.addListener(function(request, sender) { 
    chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) { 
    url = tabs[0].url; 
    if (url.search("[?&]view=list") == -1) 
    { 
     url = setGetParameter(url,'view','list'); 
     chrome.tabs.update(tabs[0].id,{url:url}); 
     process(request); 
    } 
    }); 
    process(request); 
}); 

function process(request) { 
    if (request.action == "getSource") { 
    message.innerText = request.source; 
    var data = new FormData(); 
    data.append('source',request.source); 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == XMLHttpRequest.DONE) { 
      message.innerText = xhttp.responseText; 
     } 
    } 
    xhttp.open("POST","http://127.0.0.1:5000/api/scraper",true); 
    xhttp.send(data); 
    } 
} 

function onWindowLoad() { 

    var message = document.querySelector('#message'); 

    chrome.tabs.executeScript(null, { 
    file: "getPagesSource.js" 
    }, function() { 
    // If you try and inject into an extensions page or the webstore/NTP you'll get an error 
    if (chrome.runtime.lastError) { 
     message.innerText = 'There was an error injecting script : \n' + chrome.runtime.lastError.message; 
    } 
    }); 

} 

function setGetParameter(url, paramName, paramValue) 
{ 
    var hash = location.hash; 
    url = url.replace(hash, ''); 
    if (url.indexOf(paramName + "=") >= 0) 
    { 
     var prefix = url.substring(0, url.indexOf(paramName)); 
     var suffix = url.substring(url.indexOf(paramName)); 
     suffix = suffix.substring(suffix.indexOf("=") + 1); 
     suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : ""; 
     url = prefix + paramName + "=" + paramValue + suffix; 
    } 
    else 
    { 
    if (url.indexOf("?") < 0) 
     url += "?" + paramName + "=" + paramValue; 
    else 
     url += "&" + paramName + "=" + paramValue; 
    } 
    return url + hash; 
} 

window.onload = onWindowLoad; 

ответ

0

Посмотри на webRequest.onBeforeRedirect, это событие вызывается при редиректе собирается выполнить. Вы можете прослушать это событие и повторить свою логику.

Не забудьте объявить разрешение webRequest с разрешениями хоста для любых хостов, чьи сетевые запросы вы хотите получить у вас manifest.json.

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