Из содержимого script можно ли получить доступ к этому идентификатору вкладки? Я хочу отправить сообщение на фоновое изображение из содержимого script, которое сообщает моему расширению "сделать что-то с этой вкладкой" с помощью chrome.tabs. * Api. Требуется TabID, и нет смысла делать кучу логики на странице фона для поиска TabID, когда мой контент script может просто указать ему TabID в содержимом сообщения.
Получение идентификатора вкладки "this" из содержимого script в расширении Chrome?
Ответ 1
Идентификатор вкладки автоматически передается внутри MessageSender object:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log("sent from tab.id=", sender.tab.id);
});
Ответ 2
Если вы используете порты для двусторонних долгоживущих подключений, вторым аргументом в обратном вызове является объект Port, поэтому для доступа к идентификатору табуляции:
chrome.runtime.onConnect.addListener(port => {
if (port.name === "foo") {
port.onMessage.addListener((msg, sendingPort) => {
console.log("sent from tab.id=", sendingPort.sender.tab.id);
});
}
});
Ответ 3
Если вы хотите, чтобы tabId
(в моем случае в Content Script) не требовал разрешения " tabs
", можно обойти это, если Content Script отправит фиктивное сообщение фоновому сценарию, а затем фоновый сценарий ответит sender.tab.id
обратно. к скрипту содержимого!
например, в content.js
:
chrome.runtime.sendMessage({ text: "what is my tab_id?" }, tabId => {
console.log('My tabId is', tabId);
});
и в background.js
:
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.text == "what is my tab_id?") {
sendResponse({tab: sender.tab.id});
}
});
это глупый обходной путь, который работал для меня. :)
PS. О, если у вас есть разрешение на tabs
вы можете очень легко выполнить этот асинхронный запрос:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
var myTabId = tabs[0].id;
chrome.tabs.sendMessage(myTabId, {text: "hi"}, function(response) {
alert(response);
});
});
Ответ 4
Исправление выбранного ответа на сегодняшний день:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log("sent from tab.id=", sender.id);
});