每当更新选项卡时,我都想执行内容脚本功能。问题是,有时选项卡更新是ajax(不重新加载页面),同时仍然更改页面的url。因此,注入(inject)的旧内容脚本仍然存在于页面上。结果是在同一页面上插入并运行了内容脚本的多个实例。
因此,我正在寻找一种注入(inject)内容脚本的机制,前提是之前没有注入(inject)过相同的内容脚本。有任何想法吗?
最佳答案
您可以尝试将消息发送到内容脚本(Message Passing)。如果内容脚本成功返回响应,则表示内容脚本已经存在,否则返回空响应,您可以检查是否有空响应并注入(inject)内容脚本。
背景:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
if (response) {
console.log("Already there");
}
else {
console.log("Not there, inject contentscript");
}
});
});
ContentScript:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "hello")
sendResponse({message: "hi"});
});