Kodunuzu güncelleme

Başka sorunlarla ilgisi olmayan güncellemeler

Bu, uzantı hizmet çalışanının parçası olmayan kod için gerekli değişikliklerin açıklandığı üç bölümün ilkidir. Bu bölüm, başka sorunlarla ilgisi olmayan gerekli kod değişiklikleri içindir. Sonraki iki bölümde, web isteklerini engelleme ve güvenliği iyileştirme konuları ele alınmaktadır.

tab.executeScript() komutunu komut dosyası.executeScript() ile değiştirin

Manifest V3'te executeScript(), tabs API'den scripting API'ye taşınır. Bu işlem, gerçek kod değişikliklerinin yanı sıra manifest dosyasındaki izinlerde de değişiklik yapılmasını gerektirir.

executeScript() yöntemi için gerekenler:

  • "scripting" izni.
  • Ana makine izinleri veya "activeTab" izni.

scripting.executeScript() yöntemi, tabs.executeScript() ile çalışma şekline benzer. Birkaç fark vardır.

  • Eski yöntem yalnızca tek bir dosya kabul ederken, yeni yöntem bir dosya dizisi alabilir.
  • InjectDetails yerine bir ScriptInjection nesnesi de geçirirsiniz. İkisi arasında birden çok fark vardır. Örneğin, tabId artık bir yöntem bağımsız değişkeni olarak değil, ScriptInjection.target üyesi olarak aktarılıyor.

Örnekte, bunun nasıl yapılacağı gösterilmektedir.

Manifest V2
async function getCurrentTab() {/* ... */}
let tab = await getCurrentTab();

chrome.tabs.executeScript(
  tab.id,
  {
    file: 'content-script.js'
  }
);

Arka plandaki bir komut dosyası.

Manifest V3
async function getCurrentTab()
let tab = await getCurrentTab();

chrome.scripting.executeScript({
  target: {tabId: tab.id},
  files: ['content-script.js']
});

Uzantı hizmet çalışanı.

tab.insertCSS() ve tab.removeCSS() öğelerini komut dosyası.insertCSS() ve Scripting.removeCSS() ile değiştirin.

Manifest V3'te insertCSS() ve removeCSS(), tabs API'den scripting API'ye geçer. Bu, kod değişikliklerine ek olarak manifest dosyasındaki izinlerde de değişiklik yapılmasını gerektirir:

  • "scripting" izni.
  • Ana makine izinleri veya "activeTab" izni.

scripting API'sindeki işlevler, tabs üzerindeki işlevlere benzer. Birkaç fark vardır.

  • Bu yöntemleri çağırırken InjectDetails yerine bir CSSInjection nesnesi geçirirsiniz.
  • tabId artık bir yöntem bağımsız değişkeni olarak değil, CSSInjection.target üyesi olarak aktarılıyor.

Örnekte, insertCSS() için bu işlemin nasıl yapılacağı gösterilmektedir. removeCSS() için prosedür aynıdır.

Manifest V2
chrome.tabs.insertCSS(tabId, injectDetails, () => {
  // callback code
});

Arka plandaki bir komut dosyası.

Manifest V3
const insertPromise = await chrome.scripting.insertCSS({
  files: ["style.css"],
  target: { tabId: tab.id }
});
// Remaining code. 

Uzantı hizmet çalışanı.

Tarayıcı İşlemlerini ve Sayfa İşlemlerini İşlemler ile Değiştirme

Tarayıcı işlemleri ve sayfa işlemleri, Manifest V2'de ayrı kavramlardır. Başlangıçta farklı roller üstlenmiş olsalar da aralarındaki farklar zamanla azaldı. Manifest V3'te bu kavramlar Action API'de birleştirilir. Bunun için manifest.json ve uzantı kodunda, Manifest V2 arka plan komut dosyanıza koyacağınızdan farklı değişiklikler yapılması gerekir.

Manifest V3'teki işlemler tarayıcı işlemlerine çok benzer. Ancak action API, pageAction tarafından sağlanan gibi hide() ve show() sağlamaz. Hâlâ sayfa işlemlerine ihtiyacınız varsa bildirimsel içerik kullanarak bunları emüle edebilir veya sekme kimliğiyle enable() veya disable() çağrısı yapabilirsiniz.

"browser_action" ve "page_action" öğelerini "action" ile değiştirin

manifest.json alanındaki "browser_action" ve "page_action" alanlarını "action" alanıyla değiştirin. "action" alanıyla ilgili bilgiler için referansa bakın.

Manifest V2
{
  ...
  "page_action": { ... },
  "browser_action": {
    "default_popup": "popup.html"
   }
  ...
}
Manifest V3
{
  ...
  "action": {
    "default_popup": "popup.html"
  }

  ...
}

browserAction ve pageAction API'lerini action API ile değiştirme

Manifest V2'de browserAction ve pageAction API'lerinin kullanıldığı yerlerde artık action API'yi kullanmanız gerekir.

Manifest V2
chrome.browserAction.onClicked.addListener(tab => { ... });
chrome.pageAction.onClicked.addListener(tab => { ... });
Manifest V3
chrome.action.onClicked.addListener(tab => { ... });

Geri çağırmaları vaatlerle değiştirin

Manifest V3'te birçok uzantı API yöntemi vaatler döndürür. Promise, eşzamansız bir yöntem tarafından döndürülen bir değerin proxy'si veya yer tutucusudur. Promise'i hiç kullanmadıysanız MDN'den bu özellikler hakkında bilgi edinebilirsiniz. Bu sayfada, uzantıları bir Chrome uzantısında kullanmak için bilmeniz gerekenler açıklanmaktadır.

Geriye dönük uyumluluk için birçok yöntem, vade desteği eklendikten sonra geri çağırmaları desteklemeye devam eder. Aynı işlev çağrısında ikisini birden kullanamayacağınızı unutmayın. Bir geri çağırma iletirseniz işlev bir sözü döndürmez ve döndürülen bir sözü istiyorsanız geri çağırmayı geçirmez. Etkinlik işleyiciler gibi bazı API özellikleri için geri çağırma yapmaya devam edilecek. Bir yöntemin taahhütleri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini arayın.

Geri çağırmayı söze dönüştürmek için geri çağırmayı kaldırın ve sözü yerine getirin. Aşağıdaki örnek, isteğe bağlı izin örneğinden (özellikle newtab.js) alınmıştır. Geri çağırma sürümü, geri çağırma yaparak örneğin request() çağrısının nasıl görüneceğini gösterir. Vaat edilen sürümün eşzamansız olarak yeniden yazılabileceğini ve bekleyin.

Geri Arama
chrome.permissions.request(newPerms, (granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});
Söz
const newPerms = { permissions: ['topSites'] };
chrome.permissions.request(newPerms)
.then((granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});

Manifest V2 arka plan bağlamı bekleyen işlevleri değiştirin

Diğer uzantı bağlamları yalnızca mesaj iletme özelliğini kullanarak uzantı hizmet çalışanlarıyla etkileşim kurabilir. Sonuç olarak, özellikle aşağıdaki konularda arka plan bağlamı bekleyen aramaları değiştirmeniz gerekir:

  • chrome.runtime.getBackgroundPage()
  • chrome.extension.getBackgroundPage()
  • chrome.extension.getExtensionTabs()

Uzantı komut dosyalarınız, Service Worker ile uzantınızın diğer bölümleri arasında iletişim kurmak için mesaj iletme özelliğini kullanmalıdır. Şu anda, sendMessage() kullanmak ve uzantı hizmeti çalışanınıza chrome.runtime.onMessage uygulamak gerekir. Uzun vadede, bu aramaları postMessage() ve Service Worker'ın mesaj etkinliği işleyici ile değiştirmeyi planlamalısınız.

Desteklenmeyen API'leri değiştirin

Aşağıda listelenen yöntem ve özelliklerin Manifest V3'te değiştirilmesi gerekir.

Manifest V2 yöntemi veya özelliği Şununla değiştir:
chrome.extension.connect() chrome.runtime.connect()
chrome.extension.connectNative() chrome.runtime.connectNative()
chrome.extension.getExtensionTabs() chrome.extension.getViews()
chrome.extension.getURL() chrome.runtime.getURL()
chrome.extension.lastError Yöntemlerin vaatleri verdiği durumlarda promise.catch() değerini kullanın
chrome.extension.onConnect chrome.runtime.onConnect
chrome.extension.onConnectExternal chrome.runtime.onConnectExternal
chrome.extension.onMessage chrome.runtime.onMessage
chrome.extension.onRequest chrome.runtime.onMessage
chrome.extension.onRequestExternal chrome.runtime.onMessageExternal
chrome.extension.sendMessage() chrome.runtime.sendMessage()
chrome.extension.sendNativeMessage() chrome.runtime.sendNativeMessage()
chrome.extension.sendRequest() chrome.runtime.sendMessage()
chrome.runtime.onSuspend (arka plan komut dosyaları) Uzantı hizmet çalışanlarında desteklenmez. Bunun yerine beforeunload doküman etkinliğini kullanın.
chrome.tabs.getAllInWindow() chrome.tabs.query()
chrome.tabs.getSelected() chrome.tabs.query()
chrome.tabs.onActiveChanged chrome.tabs.onActivated
chrome.tabs.onHighlightChanged chrome.tabs.onHighlighted
chrome.tabs.onSelectionChanged chrome.tabs.onActivated
chrome.tabs.sendRequest() chrome.runtime.sendMessage()
chrome.tabs.Tab.selected chrome.tabs.Tab.highlighted