javascript - 如何将 background.js 中的自定义函数用于 Chrome 扩展程序?

标签 javascript google-chrome-extension

我正在编写一个 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参数。 我把这个函数放到了background.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"]
);

关于javascript - 如何将 background.js 中的自定义函数用于 Chrome 扩展程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16650135/

相关文章:

google-chrome-extension - 如何仅通过单击图标或按钮来关闭 Chrome 扩展

google-chrome-extension - chrome 中的自定义协议(protocol)处理程序

google-chrome - Chrome 打包应用程序/pdf.js

javascript - 从 Oracle Apex 中的 AJAX 流程获取多个答案

javascript - 在 Node-RED 切换节点中使用上下文值

javascript - 通过 http 保护 POSTED 数据的最佳方法?

javascript - Chrome 扩展 - 打开没有图像的选项卡

javascript - 带有单选按钮的 Jquery 弹出窗口

javascript - 试图弄清楚这个当前时间和日期代码的逻辑

javascript - D3 - 未捕获的类型错误 :