Kodunuzu güncelleme

Diğer sorunlarla ilgisi olmayan güncellemeler

Bu, uzantı hizmet çalışanının parçası olmayan kod için gereken değişiklikleri açıklayan üç bölümden ilkidir. Bu bölüm, diğer sorunlarla ilgili olmayan gerekli kod değişiklikleri içindir. Sonraki iki bölümde engelleme web isteklerini değiştirme ve güvenliği artırma konuları ele alınmaktadır.

tabs.executeScript() yerine scripting.executeScript() kullanın

Manifest V3'te executeScript(), tabs API'sinden scripting API'sine 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 alabilirken yeni yöntem bir dizi dosya alabilir.
  • Ayrıca InjectDetails yerine bir ScriptInjection nesnesi de iletirsiniz. İkisi arasında birden fazla fark vardır. Örneğin, tabId artık bir yöntem bağımsız değişkeni yerine ScriptInjection.target üyesi olarak iletilir.

Örnekte bunun nasıl yapılacağı 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ı dosyasında.

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() yerine scripting.insertCSS() ve scripting.removeCSS() kullanın

Manifest V3'te insertCSS() ve removeCSS(), tabs API'sinden scripting API'sine taşınır. Bu, kod değişikliklerinin yanı sıra 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 API'sindeki işlevlere benzer. Birkaç fark vardır.

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

Ö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ı dosyasında.

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'ni İşlemler ile değiştirme

Tarayıcı işlemleri ve sayfa işlemleri, Manifest V2'de ayrı kavramlardı. Farklı rollerle başlasalar da aralarındaki farklar zamanla azaldı. Manifest V3'te bu kavramlar Action API'de birleştirilmiştir. Bu işlem, manifest.json ve uzantı kodunuzda, Manifest V2 arka plan komut dosyanıza ekleyeceğinizden farklı değişiklikler yapmanızı gerektirir.

Manifest V3'teki işlemler, tarayıcı işlemlerine çok benzer. Ancak action API'si, pageAction'nin yaptığı gibi hide() ve show() sağlamaz. Sayfa işlemlerine hâlâ ihtiyacınız varsa bunları açıklayıcı içerik kullanarak taklit edebilir veya sekme kimliğiyle enable() ya da disable() yöntemini çağırabilirsiniz.

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

manifest.json içinde "browser_action" ve "page_action" alanlarını "action" alanıyla 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'nizin browserAction ve pageAction API'lerini kullandığı durumlarda artık action API'yi 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ı Promise'lerle değiştirme

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

Geriye dönük uyumluluk için birçok yöntem, Promise desteği eklendikten sonra geri çağırmaları desteklemeye devam eder. Aynı işlev çağrısında ikisini birden kullanamayacağınızı unutmayın. Geri çağırma işlevi iletirseniz işlev bir Promise döndürmez. Promise döndürülmesini istiyorsanız geri çağırma işlevi iletmeyin. Etkinlik işleyiciler gibi bazı API özellikleri için geri çağırmalar kullanılmaya devam edecektir. Bir yöntemin Promise'leri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini arayın.

Geri çağırmayı 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, isteğe bağlı izinler örneğinden, özellikle de newtab.js dosyasından alınmıştır. Geri çağırma sürümü, örneğin request() çağrısının geri çağırma ile nasıl görüneceğini gösterir. 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');
  }
});
Promise
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ı hizmet çalışanlarıyla yalnızca mesaj iletimi kullanarak etkileşim kurabilir. 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 iletimini kullanmalıdır. Şu anda bu işlem, uzantı hizmet çalışanınızda sendMessage() kullanılarak ve browser.runtime.onMessage uygulanarak yapılabilir. Uzun vadede bu çağrıları postMessage() ve hizmet çalışanının mesaj etkinliği 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 promise döndürdüğü durumlarda 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ı hizmet çalışanlarında desteklenmez. Bunun yerine beforeunload doküman 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