我正在编写一个 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/