javascript Chrome扩展:如何从background.html中获取当前网页的url

ohtdti5x  于 2023-01-11  发布在  Java
关注(0)|答案(5)|浏览(101)

据我所知,直接获取tab.url是不可能的(只能在popup.html中实现),而且消息传递也需要popup.html打开。有没有办法绕过这个问题,从background.html中获取当前页面的url?
我最擅长的是消息传递,我在background.html中使用了这段代码

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

然后在popup.html中我有:

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

不管怎样,上面的方法根本不起作用。有人知道一种不用打开弹出窗口就可以做到这一点的方法吗?

4uqofj5v

4uqofj5v1#

后台页面支持chrome.tabs.query,当然前提是你有tabs权限,这是Chrome 19支持的路径。

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

注意currentWindow是必需的,因为它会返回 every 窗口的活动标签页,这应该保证只返回一个标签页。
当然,请记住这是一个异步API --除了在回调函数中,您不能访问它提供的任何数据。您可以将值(如这里的url)存储在更高的作用域中,以便其他函数可以访问它,但这仍然只能在回调执行后提供正确的结果。

  • (以下是我最初的回答,以备后人参考-此方法不再需要,需要始终运行的后台页面,并且getSelected()已被弃用。

首先将其放入background.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中运行这个,当你想得到页面的url:

chrome.extension.getBackgroundPage().myURL;

因此,如果我让它出现在弹出窗口中,然后我进入谷歌并单击您的页面或浏览器操作,我会在弹出窗口中看到http://google.com/webhp

dfuffjeb

dfuffjeb2#

看到这篇文章后,我觉得应该有一种方法来标记一个讨论为“过时”。
原因是...
此问题需要迁移到manifest v2并...
答案都不工作。我正在使用一个选择onchange和张贴当前标签的网址,这是不工作。
可能这些都在清单v1中起作用。
我的回答是...

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

t2a7ltrp3#

这是一个多一点的工作,但工作就像一个魅力...
我会使用内容脚本;这是相对简单的&允许你从当前页面获取你想要的任何信息。让后台页面将脚本“注入”到当前页面中以收集你需要的信息。然后脚本将其传递回后台。
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;
});

注入. 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);

希望这对某人有帮助!

zsbz8rwp

zsbz8rwp4#

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

我不明白,上面的代码可以在后台页面使用,以获得当前标签的网址。

wn9m85ua

wn9m85ua5#

使用此
window.location.href

相关问题