我如何在后台使用自定义功能的Chrome扩展

How do I use a custom function in background.js for a Chrome Extension?

本文关键字:功能 自定义 Chrome 扩展 后台      更新时间:2023-09-26

我正在编写一个Chrome扩展,我想在我的background.js中调用一个函数。

功能如下:

function getUrlVars(url) {
  var vars = {};
  var parts = url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
    if(vars[key]){
      if(vars[key] instanceof Array)
        vars[key].push(value);
      else
        vars[key] = [vars[key], value];
    }else
      vars[key] = value;
  });
  return vars;
}

返回url的一个参数。我把这个函数放在后台。js中,但当我调用它时,它不起作用。我在这里调用函数:

chrome.webRequest.onBeforeRequest.addListener(function(details){ 
  chrome.tabs.get(details.tabId, function (tab) { 
    source=getUrlVars(details.url)[iapisource];
    id=getUrlVars(details.url)[iapiid];
    redirectUrl=tab.url+"?iapisource="+source+"&iapiid="+id;
  });
  return {cancel : true , redirectUrl : redirectUrl}; 
},
// block requests matching this url
{urls: ["*://*/*iapisource*iapiid*"]},["blocking"]);

这里我取请求前的URL,并在其后面附加新URL的参数。

我必须把函数放在哪里,我如何调用它?

我可以给你一条鱼,但我要教你如何钓鱼。

1)你应该调试你的代码,如果它不工作。StackOverflow不是一个在线调试器。

转到chrome://extensions/,找到你的扩展,点击你的背景页,转到控制台选项卡,调查你在那里看到的错误。

2)对于一件事,而不是这个:

source=getUrlVars(details.url)[iapisource];

我想你想要的是这个:

source=getUrlVars(details.url)['iapisource'];

或者更好:

var params = getUrlVars(details.url);
var redirectUrl = tab.url+"?iapisource=" + params.iapisource + "&iapiid=" + params.iapiid;

3) tabs.get回调函数只会在你已经从onBeforeRequest返回后运行

// 1.
chrome.webRequest.onBeforeRequest.addListener(function(details){  
    // 2.
    chrome.tabs.get(details.tabId, function (tab) { 
      // 4.
      source=getUrlVars(details.url)[iapisource];
      id=getUrlVars(details.url)[iapiid];
      redirectUrl=tab.url+"?iapisource="+source+"&iapiid="+id;
    });
    // 3.
    return {cancel : true , redirectUrl : redirectUrl}; // redirectUrl is undefined!
  }, 
  {urls: ["*://*/*iapisource*iapiid*"]},
  ["blocking"]
);

您可以使用extension.getBackgroundPage来访问您的背景页面的window对象,该对象通常在背景页面中包含您的全局函数。

这个问题在这里进一步讨论。

如果你不能这样做,你应该看看消息传递