Google chrome extension 已为omnibox触发内容脚本
我的Chrome扩展将内容脚本注入每个页面(Google chrome extension 已为omnibox触发内容脚本,google-chrome-extension,Google Chrome Extension,我的Chrome扩展将内容脚本注入每个页面(“匹配项”:[“http://*/*”,“https://*/*”])。内容脚本将向后台页面触发一条消息(chrome.extension.sendRequest),后台页面注册一个事件处理程序: chrome.extension.onRequest.addListener( function (request, sender, callback) {…} ); 我注意到这些事件是在我开始在omnibox中输入时触发的,甚至在我点击Enter加载
“匹配项”:[“http://*/*”,“https://*/*”]
)。内容脚本将向后台页面触发一条消息(chrome.extension.sendRequest
),后台页面注册一个事件处理程序:
chrome.extension.onRequest.addListener(
function (request, sender, callback) {…}
);
我注意到这些事件是在我开始在omnibox中输入时触发的,甚至在我点击Enter加载目标页面之前
情景:
- 发射铬
- 开始在omnibox中输入。事实上,一旦omnibox有了焦点,我的
event handler[background.html]就会启动chrome.extension.onRequest.addListener()
这种行为——内容脚本被注入omnibox操作的“幻影”页面——已知吗?它在任何地方都有记录吗?我的事件处理程序处理这个问题的正确方法是什么?假设我的内容脚本处理程序需要操纵网页。我是否应该检查sender.tab.index,并且仅在
sender.tab.index!=-1
?Google extension的API没有完整的文档记录,并且有很多未记录的行为。从omnibox触发的这些事件并不是什么新鲜事,也没有文档记录
我建议不要自动插入您的内容脚本,而是通过编程方式,作为对chrome.tabs.onUpdate事件的响应
它将在每个url的选项卡更改时触发。您应该在background.html中收听,然后使用chrome.tabs.executeScript执行内容脚本
通过这种方式,您将能够在执行内容脚本之前验证选项卡的id和url
顺便说一句,我假设您的匹配模式是http://*/*没有发生的那么多。预呈现页面会出现这种行为,但这种情况应该少很多。在这些情况下,您可以在内容脚本中使用,除非页面可见,否则不会向后台页面发送消息
您还应该为内容脚本注入的极端数量的“选项卡”提交一份文件。您描述的行为称为“Chrome即时”搜索,它涉及Chrome准备不可见的搜索结果选项卡,然后将它们替换为可见的选项卡,以更快地感知搜索结果。Chrome有时还“预呈现”其他网页,以更快地感知页面加载 是的,选项卡ID为-1表示该选项卡当前是虚拟选项卡(用户无法访问) 我还没有在任何地方找到任何关于幻影(预渲染)选项卡的完整文档,但当Chrome用预渲染选项卡替换普通选项卡时,会触发两个事件,他们的文档确实提到预渲染和Chrome Instant: