2011-06-23 94 views
5

從我的知識來看,它不可能直接通過獲取tab.url(只在popup.html中可能),並且做消息傳遞也需要popup.html打開。無論如何繞過這一點,並從background.html獲取當前頁面的網址?Chrome擴展程序:如何從background.html獲取當前網頁網址

我最好的拍攝是與消息傳遞,這是我在background.html

var bg = chrome.extension.getPopupPage(); 
var myURL = bg.myURL; 

然後在popup.html我用這個代碼:

chrome.tabs.getSelected(null, function(tab) { 
    var myURL = tab.url; 
}) 

反正上面開不工作在所有。任何人都知道如何做到這一點,而不必實際打開彈出窗口?

回答

11

chrome.tabs.query支持從後臺頁面,當然只要你有tabs權限。這是支持的路線爲Chrome瀏覽器19

chrome.tabs.query({ 
    active: true, 
    currentWindow: true 
}, function(tabs) { 
    var tab = tabs[0]; 
    var url = tab.url; 
}); 

注意,因爲它會否則返回活動選項卡窗口currentWindow需要的。這應該保證只返回一個選項卡。

當然,請記住,這是一個異步API--除了在回調函數中,您不能訪問它提供的任何數據。您可以將值(例如url)存儲在更高的範圍內,以便其他函數可以訪問它,但在執行回調後仍然會提供正確的結果。


(下面是我原來的答覆一直爲後人 - 這個方法是不再需要,需要經常運行的後臺頁面,getSelected()已過時)

首先把這個背景.html和使myURL可變全球:

var myURL = "about:blank"; // A default url just in case below code doesn't work 
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { // onUpdated should fire when the selected tab is changed or a link is clicked 
    chrome.tabs.getSelected(null, function(tab) { 
     myURL = tab.url; 
    }); 
}); 

然後在popup.html運行時您希望得到的頁面網址:

chrome.extension.getBackgroundPage().myURL; 

因此,如果我要讓它出現在彈出窗口中,並且我去Google並點擊了您的頁面或瀏覽器操作,我會在彈出窗口中看到http://google.com/webhp

+0

謝謝!完美的作品。 – Calvin

1
chrome.tabs.getSelected(null, function(tab) { 
    var myURL = tab.url; 
}); 

我不明白,上面的代碼可以在後臺頁面中使用,以獲取當前選項卡的網址。

+1

從我的理解上面的代碼將不會在後臺頁面工作,因爲null值需要在後臺windowid,但不彈出。 [來自評論的頂部回答](http://stackoverflow.com/questions/1979583/how-can-i-get-the-url-for-a-google-chrome-tab) – Calvin

+2

getSelected已被棄用。 – Soviut

2

看到這篇文章後,我覺得應該有一種方式來標記討論爲「過時」。

原因是...

這個問題需要遷移到體現v2和...
既沒有工作的答案。我正在使用select onchange併發布當前選項卡的網址,該網址無效。

可能這些都在清單v1中工作。

我的回答是...

var myURL = "not set yet"; 
window.addEventListener('load', function() { 
    chrome.tabs.getSelected(null,function(tab){ 
     myURL=tab.url; 
    });  
+2

getSelected已棄用。 – Soviut

0

這是多一點的工作,但就像一個魅力...

我會用一個內容腳本;這是相對簡單的&允許您從當前頁面獲取您可能需要的任何信息。讓背景頁面將腳本「注入」當前網頁以收集您所需的信息。該腳本然後將其傳回到背景。

background.js:

// Icon is clicked and triggers content script to be injected into current webpage 
chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, { file: 'inject.js' }); 
}); 

// Listens for message back from content script and then runs 
chrome.runtime.onMessage.addListener(function (request) { 
    var URL = request.url; 
}); 

inject.js(內容腳本):

// Gathers up in the information that you need from webpage 
var pageInfo = { 
    "url": window.location.href 
}; 

// Sends the information back to background.js 
chrome.runtime.sendMessage(pageInfo); 

希望這可以幫助別人!

+1

不需要使用消息傳遞API,executeScript的回調包含內容腳本的最後一個表達式的值。哎呀,內容腳本根本不需要;在清單文件中聲明'「標籤」'權限後,您可以使用'tab.url'來獲取標籤的URL。 –

相關問題