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şiklikleri açıklayan üç bölümden 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 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ışmasına benzer. Birkaç farklılık vardır.

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

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

shortcuts.insertCSS() ve tab.removeCSS() öğelerini,scripting.insertCSS() vescripting.removeCSS() ile değiştirin

Manifest V3'te, insertCSS() ve removeCSS(), tabs API'den scripting API'ye geçiyor. Bu işlem, 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ç farklılık vardır.

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

Ö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. İşe farklı rollerle başlamış olsalar da aralarındaki farklar zamanla azaldı. Manifest V3'te bu kavramlar İşlem API'sinde 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 en çok benzer. Ancak action API'si, pageAction tarafından yapılan 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ını yapabilirsiniz.

"browser_action" ve "page_action" değerlerini "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"
  }

  ...
}

tarayıcı_işlemi ve pageAction API'lerini action API ile değiştirme

Manifest V2'niz browserAction ve pageAction API'lerini kullandığında 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ı taahhütlerle değiştirin

Manifest V3'te birçok uzantı API yöntemi vaatler verir. Promise, eşzamansız bir yöntem tarafından döndürülen bir değerin proxy'si veya yer tutucusudur. Promise'leri hiç kullanmadıysanız MDN'de bunlar hakkında 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, söz 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 bir sözün döndürülmesini istiyorsanız geri çağırmayı geçemez. Etkinlik işleyiciler gibi bazı API özellikleri için geri çağırma kullanılması gerekecektir. Bir yöntemin vaatleri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini bulun.

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ü, bir geri çağırmayla örneğin request() çağrısının nasıl görüneceğini gösterir. Vadedilen sürümün eşzamansız ve bekleme süresiyle yeniden yazılabileceğ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ı bekleyen işlevleri değiştirin

Diğer uzantı bağlamları, yalnızca mesaj iletme özelliğini kullanarak uzantı hizmeti çalışanlarıyla etkileşim kurabilir. Sonuç olarak, arka plan bağlamı bekleyen aramaları, özellikle:

  • 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 iletme özelliğini kullanmalıdır. Şu anda bu, sendMessage() kullanımını ve uzantı hizmeti çalışanınızda chrome.runtime.onMessage uygulamasının uygulanmasını gerektirir. Uzun vadede, bu aramaları postMessage() ve bir hizmet çalışanının mesaj etkinlik işleyicisi ile değiştirmeyi planlamanız gerekir.

Desteklenmeyen API'leri değiştirin

Aşağıda listelenen yöntemler 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 vaat ettiği yerlerde 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.onRequest
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