2017-01-30 101 views
-1

我正在嘗試記錄爲加載的每個頁面所做的所有請求。這裏有manifest.jsonbackground.js文件。在Chrome擴展中獲取當前頁面的url

manifest.json:

{ 
    "name": "Requests", 
    "version": "1.0", 
    "description": "Log Requests", 
    "permissions": ["webRequest", 
    "webRequestBlocking", 
    "tabs", 
    "<all_urls>"], 
    "background": { 
    "scripts": ["background.js"] 
    }, 

    "manifest_version": 2 
} 

background.js:

var url = '' 

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

chrome.webRequest.onBeforeRequest.addListener(
    function(info) { 

    console.log("Request for " + url + ': --> ' + info.url); 
    }, 
    // filters 
    { 
    urls: ["<all_urls>"] 
    }, 
    // extraInfoSpec 
    ["blocking"]); 

我已經是裏面background.jsurl參數總是包含chrome://extension/不管我加載的頁面的問題。我不明白爲什麼會發生這種情況。我試圖使用window.location給我當前的網址,但那也返回相同的值。任何人都可以請幫忙?

+1

爲什麼你認爲它會改變?你只設置一次'url',並且永遠不要改變它。所以,它永遠不會改變。 – Makyen

+0

@Makyen謝謝你的答案Makyen。我的理解是每次加載新鏈接時都會觸發'chrome.tabs.query'。我試圖通過'chrome.webNavigation.onBeforeNavigate.addListener做到這一點(功能(具體){\t \t URL = details.url; \t \t});'但每次那不是返回正確的URL。你有什麼其他的建議? – QPTR

+0

只需將'chrome.tabs.query'方法嵌套到'onBeforeRequest'的'callback'中就行了。我希望這種做法是正確的。 – QPTR

回答

0

所以,這裏是一個可行的解決方案。我做的唯一的事情就是在onBeforeRequest的回調中放入chrome.tabs.query方法,這樣每次收到請求時都會觸發它(因此也會更新url)。

var url = '' 

var callbackOnRequest = function(info) { 

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

    }); 

    console.log("Request for " + url + ': --> ' + info.url); 
} 
var filters = { 
    urls: ["<all_urls>"] 
}; 

var extraInfoSpec = ["blocking"]; 

chrome.webRequest.onBeforeRequest.addListener(callbackOnRequest, filters, extraInfoSpec); 
-2

你可以通過chrome.windows.WINDOW_ID_CURRENT功能每個請求的URL在background.js

chrome.tabs.query({'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT}, 
    function(tabs){ 
     alert(tabs[0].url); 
    } 
); 
+0

這總是背景頁面的位置。 –

相關問題