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

时间:2016-04-12 15:15:41

标签: javascript google-chrome redirect google-chrome-extension

我正在尝试开发一个chrome扩展,它解析当前标签中的数据并将其发布到对数据进行处理的网址。在某些情况下,可能需要重定向页面,以便存在某些获取参数。我的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;

1 个答案:

答案 0 :(得分:0)

看看webRequest.onBeforeRedirect,当要执行重定向时会触发此事件。您可以收听此事件并再次执行您的逻辑。

请勿忘记为您要在其中访问网络请求的所有主机webRequest声明manifest.json权限以及主机权限。