2017-01-30 102 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

这总是背景页面的位置。 –

相关问题