在加载新页面时,将chrome扩展名写入console.log激活的选项卡URL

时间:2019-02-21 18:41:43

标签: javascript google-chrome google-chrome-extension

我想编写一个chrome扩展名,该扩展名在每次加载新站点时记录当前的活动标签URL,并将其发送到服务器以供进一步使用。到目前为止,我已经设法编写了以下代码: manifest.json

{
    "manifest_version": 2,
    "name": "Currenturl",
    "description": "Fetches current tab url.",
    "version": "0.1",
    "author": "Tarun Khare",
    "browser_action": {
        "default_icon": "icon.png",
        "default_title": "Just observing your current url."
    },
    "permissions": ["tabs", "activeTab"],
    "background": {
        "scripts": ["content.js"],
        "persistent": false
    }
}

content.js

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
    var url = tabs[0].url;
    console.log("hello: "+url);
});

我正在使用后台脚本,因为chrome.tabs在内容脚本中不起作用。但是此扩展程序无法在chrome控制台中打印任何内容。有什么问题吗?

2 个答案:

答案 0 :(得分:2)

  1. 将content.js重命名为background.js,因为这是背景脚本
  2. 使用chrome.tabs.onUpdated侦听器
  3. 查看正确的控制台:Where to read console messages from background.js?

chrome.tabs.onUpdated.addListener((tabId, change, tab) => {
  if (change.url) {
    console.log(change.url);
  }
});

它将在所有标签中报告URL更改。
通过添加对tab.active属性的检查,您还可以将处理限制为仅活动选项卡。

答案 1 :(得分:0)

我尝试根据您提供的信息编写代码。

const tabUpdatelistenerFun = (tabid, changeInfo, tab) => {
  const url = changeInfo.url;

  if (!url || ['chrome://', 'about://'].some(p => url.startsWith(p))) return false;

  const { index, active, highlighted, windowId } = tab;

  if (!active) return false;

  chrome.tabs.query({ index, highlighted, windowId, lastFocusedWindow: true }, () => {
    console.log(url);
  })
}

chrome.tabs.onUpdated.addListener(tabUpdatelistenerFun);

我认为这就是你想要的。