我找到了几种方法,但它们看起来已经过时,或者因为某些原因而无法正常工作。也许tunnelvision:
首先要做的事情:
我认为我manifest.json
拥有正确的权限:
"permissions": [
"tabs",
"activeTab"
]
我有两个简单的脚本,background.js
和content.js
(这些脚本被正确识别,错误不能在这里)。
在我background.js
我尝试了几种方法:
chrome.browserAction.onClicked.addListener(buttonClicked);
var sharedUrl;
function buttonClicked(tab) {
chrome.tabs.getCurrent(function(tab) {
// please read further, this was my last resort, I tried other stuff as well
sharedUrl = console.log(window.location.href);
});
let msg = {
txt: "Hello",
url: sharedUrl
}
chrome.tabs.sendMessage(tab.id, msg);
}
我尝试使用getCurrent()
然后tab.url
,但这不起作用(tab[0].url
我也尝试使用getSelected()
以及类似的内容:
chrome.tabs.query({active: true, currentWindow: true}, function(arrayOfTabs) {
var activeTab = arrayOfTabs[0];
});
我的content.js
就在这里:
chrome.runtime.onMessage.addListener(gotMessage);
function gotMessage(message, sender, sendResponse) {
console.log(message.txt);
console.log(message.url);
}
它显示“Hello”,但不显示我正在寻找的URL。
修改 可能很重要的是,我想在我的扩展程序中点击按钮后检索网址。
感谢您的反馈和帮助。
答案 0 :(得分:0)
好的,根据文档,当您不在选项卡上下文中时,您无法获取选项卡对象。选项卡上下文仅包含内容脚本。因此,您无法访问制表符,因为您是从后端页面调用它。如果您的扩展程序已生成标签,则您只能这样做。
获取此脚本调用的选项卡。也许 如果从非选项卡上下文调用(例如:背景),则为undefined 页面或弹出视图)。
因此,唯一可行的方法是更改扩展数据流。