2013-05-20 84 views
1

我在寫一個Chrome擴展,我想在我的background.js中調用一個函數。如何在background.js中爲Chrome擴展使用自定義函數?

這是函數:

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的參數。

我必須在哪裏放置該功能,以及如何調用它?

+0

回到你叫從background.js頁面內或其他地方在你的擴展,例如,該功能內容腳本或popup.html? – QFDev

+0

在background.js –

+0

您可以包含來自何處的代碼,這可能是問題的一部分嗎? – QFDev

回答

2

我可以給你一條魚,但我會教你如何去釣魚。

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"] 
); 
+0

謝謝。對不起,但我在這個問題上被封鎖,這讓我發瘋。 redirectUrl是定義的,如果我在返回後放置圓括號,但是頁面繼續處理details.url,所以它不會重定向。 –

1

您可以使用extension.getBackgroundPage訪問您的背景頁面的window對象,該對象通常包含背景頁面中的全局函數。

這個問題進一步討論here.

如果你不能做到這一點,你應該看看message passing

+0

所以我把這個函數放在background.html中的scrpit標籤中,我使用了extension.getBackgroundPage,然後我怎樣才能調用這個函數? –

+0

'extension.getBackgroundPage.yourFunction()' –

+0

它不起作用,因爲我無法同時使用background.js和background.html –

相關問題