【问题标题】:Chrome Extension - Rerun extension script after redirecting current tabChrome 扩展 - 重定向当前选项卡后重新运行扩展脚本
【发布时间】:2016-08-03 07:27:45
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    看看webRequest.onBeforeRedirect,这个事件在重定向即将被执行时触发。您可以收听此事件并再次执行您的逻辑。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-01
      • 2012-03-14
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      相关资源
      最近更新 更多