我想知道的是,我所描述的是Chrome中的预期行为或错误。
当你在omnibar中输入一个URL时,chrome会在后台预加载一个不可见的标签,并在用户点击Enter时将其交换。
内容脚本也会插入到预加载的标签中。我有一个包含一行的内容脚本:
chrome.runtime.sendMessage({ msg: 'init' });
后台页面等待此消息,并将脚本动态加载到发送消息的选项卡中。
chrome.runtime.onMessage.addListener(
function(request, sender) {
console.log('Loading script.js into frameId: ' + sender.frameId + ', tabId: ' + sender.tab.id);
chrome.tabs.executeScript(sender.tab.id, {
file: 'script.js',
frameId: sender.frameId,
runAt: 'document_start',
matchAboutBlank: true
});
}
)
后台页面还会侦听制表符替换事件。
chrome.tabs.onReplaced.addListener(
function (addedTabId, removedTabId){
console.log('Tab id changed from ' + removedTabId + ' to ' + addedTabId);
}
);
script.js动态加载到大多数选项卡中没有问题。但是,预加载的选项卡是一个问题,因为值sender.tab.id显然无效
下图显示了背景页面的控制台。
每一行对应以下行动:
这对我来说似乎都是倒退。这是否意味着不可能将脚本动态执行到预加载的选项卡中?