Chrome扩展-重定向当前选项卡后重新运行扩展脚本



我正在尝试开发一个chrome扩展,该扩展解析当前选项卡中的数据,并将其发布到对数据进行处理的url中。在某些情况下,页面可能需要重定向,以便出现某些get参数。我的popup.js可以成功地进行重定向,但我需要再次单击扩展才能使其正常运行。注意:如果页面具有正确的参数,它将正常运行。我如何调整这一点,以便代码在重定向后重新运行,并将新的源代码发布到指定的url。

这是我的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;

查看webRequest.onForbeRedirect,此事件在即将执行重定向时触发。你可以听这个事件,然后重新做你的逻辑。

不要忘记声明webRequest权限以及您要在manifest.json中访问其网络请求的任何主机的主机权限。

最新更新