Başka sorunlarla ilgisi olmayan güncellemeler
Bu, uzantı hizmet çalışanının parçası olmayan kod için gerekli değişikliklerin açıklandığı üç bölümün 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 konuları 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ışma şekline benzer. Birkaç fark vardır.
- Eski yöntem yalnızca tek bir dosya kabul ederken, yeni yöntem bir dosya dizisi alabilir.
InjectDetails
yerine birScriptInjection
nesnesi de geçirirsiniz. İkisi arasında birden çok fark vardır. Örneğin,tabId
artık bir yöntem bağımsız değişkeni olarak değil,ScriptInjection.target
üyesi olarak aktarılıyor.
Örnekte, bunun nasıl yapılacağı gösterilmektedir.
async function getCurrentTab() {/* ... */} let tab = await getCurrentTab(); chrome.tabs.executeScript( tab.id, { file: 'content-script.js' } );
async function getCurrentTab() let tab = await getCurrentTab(); chrome.scripting.executeScript({ target: {tabId: tab.id}, files: ['content-script.js'] });
tab.insertCSS() ve tab.removeCSS() öğelerini komut dosyası.insertCSS() ve Scripting.removeCSS() ile değiştirin.
Manifest V3'te insertCSS()
ve removeCSS()
, tabs
API'den scripting
API'ye geçer. Bu, kod değişikliklerine ek olarak 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
üzerindeki işlevlere benzer. Birkaç fark vardır.
- Bu yöntemleri çağırırken
InjectDetails
yerine birCSSInjection
nesnesi geçirirsiniz. tabId
artık bir yöntem bağımsız değişkeni olarak değil,CSSInjection.target
üyesi olarak aktarılıyor.
Örnekte, insertCSS()
için bu işlemin nasıl yapılacağı gösterilmektedir. removeCSS()
için prosedür aynıdır.
chrome.tabs.insertCSS(tabId, injectDetails, () => { // callback code });
const insertPromise = await chrome.scripting.insertCSS({ files: ["style.css"], target: { tabId: tab.id } }); // Remaining code.
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. Başlangıçta farklı roller üstlenmiş olsalar da aralarındaki farklar zamanla azaldı. Manifest V3'te bu kavramlar Action API'de 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 çok benzer. Ancak action
API, pageAction
tarafından sağlanan 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ı yapabilirsiniz.
"browser_action" ve "page_action" öğelerini "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.
{ ... "page_action": { ... }, "browser_action": { "default_popup": "popup.html" } ... }
{ ... "action": { "default_popup": "popup.html" } ... }
browserAction ve pageAction API'lerini action API ile değiştirme
Manifest V2'de browserAction
ve pageAction
API'lerinin kullanıldığı yerlerde artık action
API'yi kullanmanız gerekir.
chrome.browserAction.onClicked.addListener(tab => { ... }); chrome.pageAction.onClicked.addListener(tab => { ... });
chrome.action.onClicked.addListener(tab => { ... });
Geri çağırmaları vaatlerle değiştirin
Manifest V3'te birçok uzantı API yöntemi vaatler döndürür. Promise, eşzamansız bir yöntem tarafından döndürülen bir değerin proxy'si veya yer tutucusudur. Promise'i hiç kullanmadıysanız MDN'den bu özellikler hakkında bilgi edinebilirsiniz. Bu sayfada, uzantıları bir Chrome uzantısında kullanmak için bilmeniz gerekenler açıklanmaktadır.
Geriye dönük uyumluluk için birçok yöntem, vade 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 döndürülen bir sözü istiyorsanız geri çağırmayı geçirmez. Etkinlik işleyiciler gibi bazı API özellikleri için geri çağırma yapmaya devam edilecek. Bir yöntemin taahhütleri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini arayın.
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ü, geri çağırma yaparak örneğin request()
çağrısının nasıl görüneceğini gösterir. Vaat edilen sürümün eşzamansız olarak yeniden yazılabileceğini ve bekleyin.
chrome.permissions.request(newPerms, (granted) => { if (granted) { console.log('granted'); } else { console.log('not granted'); } });
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ı hizmet çalışanlarıyla etkileşim kurabilir. Sonuç olarak, özellikle aşağıdaki konularda arka plan bağlamı bekleyen aramaları değiştirmeniz gerekir:
chrome.runtime.getBackgroundPage()
chrome.extension.getBackgroundPage()
chrome.extension.getExtensionTabs()
Uzantı komut dosyalarınız, Service Worker 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, sendMessage()
kullanmak ve uzantı hizmeti çalışanınıza chrome.runtime.onMessage
uygulamak gerekir. Uzun vadede, bu aramaları postMessage()
ve Service Worker'ın mesaj etkinliği işleyici ile değiştirmeyi planlamalısınız.
Desteklenmeyen API'leri değiştirin
Aşağıda listelenen yöntem 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 vaatleri verdiği durumlarda promise.catch() değerini 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ı 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 |