我正在创建一个新标签,然后并在其中直接注入一些代码。
但是问题是,在tabs.create中使用属性active:true
(我需要使用)时,要注入的代码未正确注入。
这是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}
。 当active为false 时,将插入代码,但为true 时,似乎什么也没有发生。
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为true的情况下不起作用。
但是,它与timeout
一起使用。但是没有任何超时或间隔都无法工作 当active设置为true时。
我可以只使用timeout
,但它并不是很干净,我更想了解它的行为为何如此。我正在使用react btw。
关于活动属性的内容是这样的:
选项卡是否应成为窗口中的活动选项卡。不影响窗口是否聚焦(请参阅windows.update)。默认为true。
来源:https://developer.chrome.com/extensions/tabs#method-create