Kodunuzu güncelleme

Diğer sorunlarla ilgisi olmayan güncellemeler

Bu, uzantı hizmet çalışanı kapsamında olmayan kod için gereken değişiklikleri açıklayan üç bölümden ilkidir. Bu bölüm, diğer sorunlarla ilgili olmayan zorunlu kod değişiklikleri içindir. Sonraki iki bölümde engellenen web isteklerinin değiştirilmesi ve güvenliğin artırılması ele alınmaktadır.

tabs.executeScript() işlevini scripting.executeScript() ile değiştirin

Manifest V3'te executeScript(), tabs API'sinden scripting API'sine taşınıyor. Bu, 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 ihtiyacınız olanlar:

  • "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 alabilirken yeni yöntem bir dizi dosya alabilir.
  • Ayrıca InjectDetails yerine ScriptInjection nesnesi de iletiyorsunuz. İkisi arasında birçok fark vardır. Örneğin, tabId artık yöntem bağımsız değişkeni olarak değil, ScriptInjection.target üyesi olarak iletiliyor.

Bu işlemin nasıl yapılacağı örnekte gösterilmiştir.

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

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

Arka plan komut dosyası içinde.

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

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

Uzantı hizmeti çalışanında.

tabs.insertCSS() ve tabs.removeCSS() işlevlerini scripting.insertCSS() ve scripting.removeCSS() ile değiştirin

Manifest V3'te insertCSS() ve removeCSS(), tabs API'sinden scripting API'sine taşınır. Bu işlem için kod değişikliklerinin yanı sıra manifest dosyasındaki izinlerde de değişiklik yapılması gerekir:

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

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

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

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

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

Arka plan komut dosyası içinde.

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

Uzantı hizmeti çalışanında.

Tarayıcı İşlemleri ve Sayfa İşlemleri'nin yerini İşlemler alıyor

Tarayıcı işlemleri ve sayfa işlemleri, Manifest V2'de ayrı kavramlardı. Farklı rollerle başlamış olsalar da aralarındaki fark zamanla azalmıştır. Manifest V3'te bu kavramlar Action API'de birleştirilmiştir. Bu, manifest.json ve uzantı kodunuzda, Manifest V2 arka plan komut dosyanıza ekleyeceğinizden farklı değişiklikler yapılmasını gerektirir.

Manifest V3'teki işlemler, tarayıcı işlemlerine en çok benzeyen işlemlerdir. Ancak action API, pageAction'ün sağladığı hide() ve show() işlevlerini sağlamaz. Sayfa işlemlerine hâlâ ihtiyacınız varsa bildirimli içerik kullanarak bunları taklit edebilir veya bir sekme kimliğiyle enable() ya da disable() işlevini çağırabilirsiniz.

"browser_action" ve "page_action" yerine "action" kullanın.

manifest.json içinde "browser_action" ve "page_action" alanlarını "action" alanı ile değiştirin. "action" alanı hakkında bilgi 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'nizde browserAction ve pageAction API'lerini kullandığınız yerlerde artık action API'sini kullanmanız gerekir.

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

Geri çağırmaları sözlerle değiştirme

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

Geriye dönük uyumluluk için, birçok yöntem, söz desteği eklendikten sonra geri çağırmaları desteklemeye devam eder. İkisini de aynı işlev çağrısında kullanamayacağınızı unutmayın. Geri çağırma işlevi iletirseniz işlev bir söz döndürmez. Söz döndürülmesini istiyorsanız geri çağırma işlevi iletmeyin. Etkinlik dinleyicileri gibi bazı API özellikleri geri çağırma işlevleri gerektirmeye devam edecektir. Bir yöntemin sözleri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini bulun.

Geri çağırmadan promise'e dönüştürmek için geri çağırmayı kaldırın ve döndürülen promise'i işleyin. Aşağıdaki örnek, özellikle newtab.js isteğe bağlı izinler örneğinden alınmıştır. Geri çağırma sürümünde, örnekteki request() işlevine yapılan çağrının geri çağırma ile nasıl görüneceği gösterilir. Promise sürümünün async ve await ile yeniden yazılabileceğini unutmayın.

Geri Arama
browser.permissions.request(newPerms, (granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});
Söz verme
const newPerms = { permissions: ['topSites'] };
browser.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ştirme

Diğer uzantı bağlamları, uzantı hizmeti çalışanlarıyla yalnızca mesaj iletme yoluyla etkileşimde bulunabilir. Bu nedenle, arka plan bağlamı bekleyen çağrıları değiştirmeniz gerekir. Özellikle:

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

Uzantı komut dosyalarınız, bir hizmet çalışanı 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 bu işlem, sendMessage() kullanılarak ve uzantı hizmeti çalışanı içinde browser.runtime.onMessage uygulanarak gerçekleştirilebilir. Uzun vadede, bu çağrıları postMessage() ve bir hizmet çalışanının mesaj etkinlik işleyicisi ile değiştirmeyi planlamanız gerekir.

Desteklenmeyen API'leri değiştirme

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

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