Kodunuzu güncelleme

Diğer sorunlarla ilgisi olmayan güncellemeler

Bu, uzantı hizmet işçisinin parçası olmayan kod için gereken değişiklikleri açıklayan üç bölümden ilkidir. Bu bölüm, diğer sorunlarla alakalı olmayan zorunlu kod değişiklikleri içindir. Sonraki iki bölümde web isteklerinin engellenmesini değiştirme ve güvenliği iyileştirme konuları ele alınmaktadır.

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

Manifest V3'te executeScript(), tabs API'den scripting API'ye taşınır. Bunun için gerçek kod değişikliklerine ek olarak manifest dosyasındaki izinlerin de değiştirilmesi gerekir.

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. Aralarında birkaç fark vardır.

  • Eski yöntem yalnızca tek bir dosya alabiliyorken, yeni yöntemde bir dizi dosya alınabilir.
  • Ayrıca, InjectDetails yerine bir ScriptInjection nesnesi iletmiş olursunuz. Bu iki yöntem arasında birden fazla fark vardır. Örneğin, tabId artık bir yöntem bağımsız değişkeni yerine ScriptInjection.target'un bir üyesi olarak iletiliyor.

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

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

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

Uzantı hizmet çalışanında.

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

Manifest V3'te insertCSS() ve removeCSS(), tabs API'den scripting API'ye taşınır. Bunun için kod değişikliklerine ek olarak manifest dosyasındaki izinlerin de değiştirilmesi gerekir:

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

scripting API'deki işlevler tabs hizmetindeki işlevlere benzer. Aralarında birkaç fark vardır.

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

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

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

Arka plan komut dosyası dosyasında.

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

Uzantı hizmet ç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ı. Başlangıçta farklı rollere sahip olsalar da zamanla aralarındaki farklar azaldı. Manifest V3'te bu kavramlar Action API'sinde birleştirilmiştir. Bunun için manifest.json ve uzantı kodunuzda, 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 en çok benzer; ancak action API, pageAction gibi hide() ve show() özelliklerini sağlamaz. Hâlâ sayfa işlemlerine ihtiyacınız varsa bildirici içerik kullanarak bunları emüle edebilir veya bir sekme kimliğiyle enable() ya da disable() yöntemini çağırabilirsiniz.

"browser_action" öğesini değiştirin ve "page_action" "action" içeren

manifest.json alanındaki "browser_action" ve "page_action" alanlarını "action" alanıyla değiştirin. "action" alanı hakkında bilgi için referansı inceleyin.

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

  ...
}

BrowserAction ve pageAction API'lerini işlem API'si ile değiştirin

Manifest V2'nizde browserAction ve pageAction API'leri kullanılıyorduysa artık action API'sini kullanmanız gerekir.

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

Geri çağırma işlevlerini sözle değiştirme

Manifest V3'te birçok uzantı API yöntemi, söz döndürür. Promise, eşzamansız bir yöntemle döndürülen bir değere ait proxy veya yer tutucudur. Promises'i daha önce hiç kullanmadıysanız MDN'de bunlarla 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ğırma işlevini 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 taahhüt döndürmez. Ayrıca, döndürülen bir sözü istiyorsanız geri çağırmayı iletmez. Etkinlik dinleyicileri gibi bazı API özellikleri için geri çağırma işlevi gerekli olmaya devam edecektir. Bir yöntemin promise'leri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini bulun.

Geri çağırma işlevini bir promise'e dönüştürmek için geri çağırma işlevini kaldırın ve döndürülen promise'i işleyin. Aşağıdaki örnek, özellikle newtab.js olmak üzere isteğe bağlı izinler örneğinden 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. Beklenen sürümün eşzamansız olarak yeniden yazılabileceğini ve beklenebileceğini unutmayın.

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ı gerektiren işlevleri değiştirme

Diğer uzantı bağlamları yalnızca mesaj iletme özelliğini kullanarak uzantı hizmeti çalışanlarıyla etkileşim kurabilir. Sonuç olarak, aşağıdakiler de dahil olmak üzere arka plan bağlamı bekleyen aramaları değiştirmeniz gerekir:

  • chrome.runtime.getBackgroundPage()
  • chrome.extension.getBackgroundPage()
  • chrome.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 aktarımı kullanmalıdır. Şu anda bu işlem, sendMessage() kullanılıp uzantı hizmeti çalışanınıza chrome.runtime.onMessage uygulanarak yapılabilir. Uzun vadede bu çağrıları postMessage() ve bir hizmet çalışanının mesaj etkinlik işleyicisiyle değiştirmeyi planlamanız gerekir.

Desteklenmeyen API'leri değiştirin

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

Manifest V2 yöntemi veya mülkü Ş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öntemler vaat edilenler olduğunda promise.catch() 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ı hizmeti ç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