Kodunuzu güncelleme

Diğer sorunlarla ilgisi olmayan güncellemeler

Bu, uzantı hizmeti ç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 zorunlu kod değişiklikleri içindir. Sonraki iki bölümde, web engelleme isteklerinin değiştirilmesi ve güvenliği artırma konuları ele alınmaktadır.

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

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

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

scripting.executeScript() yöntemi, tabs.executeScript() ile çalışma şekline benzer. Birkaç farklılık 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. İkisi arasında birçok fark vardır. Örneğin tabId artık bir yöntem bağımsız değişkeni yerine ScriptInjection.target öğesinin 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'
  }
);

Bir 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.

Tables.insertCSS() ve tabs.removeCSS() öğesini scripting.insertCSS() ve scripting.removeCSS() ile değiştirin.

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

  • Bu yöntemleri çağırırken InjectDetails yerine bir CSSInjection nesnesi iletirsiniz.
  • tabId artık bir yöntem bağımsız değişkeni yerine CSSInjection.target öğesinin bir ü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
});

Bir 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ı İşlemlerini ve Sayfa İşlemlerini İşlemler ile Değiştir

Tarayıcı işlemleri ve sayfa işlemleri, Manifest V2'de ayrı kavramlardır. Başlangıçta farklı roller üstlense de aralarındaki fark zamanla azaldı. Manifest V3'te bu kavramlar Action API'de birleştirilir. 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ı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 işlem API'si ile değiştirin

Manifest V2'nizin browserAction ve pageAction API'lerini kullandığı durumlarda 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 umut veriyor. 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, taahhüt desteği eklendikten sonra geri çağırmaları desteklemeye devam eder. Her ikisini de aynı işlev çağrısında 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 işleyiciler gibi bazı API özellikleri için geri çağırma zorunlu olmaya devam edecektir. Bir yöntemin vaatleri destekleyip desteklemediğini kontrol etmek için "Promise" (Vaat) seçeneğini arayın etiketine daha yakın bir şekilde ele alacağız.

Geri çağırmadan söze dönüştürme yapmak için geri aramayı kaldırın ve verilen sözü yerine getirin. 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ı beklenen 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, 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, hizmet çalışanı ile uzantınızın diğer bölümleri arasında iletişim kurmak için mesaj iletmeyi 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 etkinliği işleyicisi ile değiştirmeyi planlamalısınız.

Desteklenmeyen API'leri değiştirin

Aşağıda listelenen yöntemleri 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ö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