Я создаю новую вкладку и и сразу вставляю в нее код .Но проблема в том, что вводимый код не внедряется должным образом при использовании свойства active:true
(которое мне нужно использовать) на tabs.create.
Вот код в popup.js:
chrome.tabs.create({url: "http://localhost:3000/", index: newTabId, active: false}, (newTab) => {
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
// check status so that it sends only one message, and not one for each status change
if(changeInfo.status === "loading") {
if (tab.id === newTab.id) {
chrome.tabs.sendMessage(newTab.id, {message: "watch_video", videoData: selectedVideoData},
function (resp) {
console.log("Resp",resp);
return true;
}
);
}
}
});
})
Вот проблемная строка: chrome.tabs.create({url: "http://localhost:3000/", index: newTabId, active: false}
. Когда активным является false , код вводится, , но когда оно истинно , кажется, ничего не происходит.
inject.js:
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.message === "watch_video") {
console.log("inject soon")
injectScript(request.videoData);
sendResponse("watch_video script is to be injected in " + window.location.href)
}
});
function injectScript(videoData) {
console.log("injected")
$(document).ready(function() {
document.test = "ABCDE"
const checkState = setInterval(() => {
$(".bkg").css({ "background-color": "#ffffff"})
}, 100)
})
}
Здесь я попробовал что-то с setInterval()
, оно не работает с , если active is true .Однако он работает с timeout
.Но не работает без тайм-аута или интервала , когда active установлен в true .
Я мог бы использовать просто использовать timeout
, но это не совсем такчисто, я бы предпочел понять, почему он ведет себя так, как он.Я использую реагирование между прочим.
Вот что сказано о active свойство :
Должна ли вкладка стать активной вкладкой в окне.Не влияет на то, сфокусировано ли окно (см. Windows.update).По умолчанию true.
Источник: https://developer.chrome.com/extensions/tabs#method-create