Diğer sorunlarla ilgisi olmayan güncellemeler
Bu, uzantı hizmet çalışanı kapsamında 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 engellenen web isteklerinin değiştirilmesi ve güvenliğin artırılması ele alınmaktadır.
tabs.executeScript() işlevini scripting.executeScript() ile değiştirin
Manifest V3'te executeScript(), tabs API'sinden scripting API'sine taşınıyor. Bu, 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 ihtiyacınız olanlar:
"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
InjectDetailsyerineScriptInjectionnesnesi de iletiyorsunuz. İkisi arasında birçok fark vardır. Örneğin,tabIdartık yöntem bağımsız değişkeni olarak değil,ScriptInjection.targetüyesi olarak iletiliyor.
Bu işlemin nasıl yapılacağı örnekte gösterilmiştir.
async function getCurrentTab() {/* ... */} let tab = await getCurrentTab(); browser.tabs.executeScript( tab.id, { file: 'content-script.js' } );
Arka plan komut dosyası içinde.
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() işlevlerini scripting.insertCSS() ve scripting.removeCSS() ile değiştirin
Manifest V3'te insertCSS() ve removeCSS(), tabs API'sinden scripting API'sine taşınır. Bu işlem için kod değişikliklerinin yanı sıra manifest dosyasındaki izinlerde de değişiklik yapılması gerekir:
"scripting"izni- Ana makine izinleri veya
"activeTab"izni.
scripting API'deki işlevler, tabs'deki işlevlere benzer. Birkaç fark vardır.
- Bu yöntemleri çağırırken
InjectDetailsyerineCSSInjectionnesnesi iletirsiniz. tabIdartık yöntem bağımsız değişkeni olarak değil,CSSInjection.targetüyesi olarak iletiliyor.
Örnekte, bu işlemin insertCSS() için nasıl yapılacağı gösterilmektedir. removeCSS() için de aynı prosedür geçerlidir.
browser.tabs.insertCSS(tabId, injectDetails, () => { // callback code });
Arka plan komut dosyası içinde.
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'nin yerini İşlemler alıyor
Tarayıcı işlemleri ve sayfa işlemleri, Manifest V2'de ayrı kavramlardı. Farklı rollerle başlamış olsalar da aralarındaki fark zamanla azalmıştır. Manifest V3'te bu kavramlar Action API'de birleştirilmiştir. Bu, manifest.json ve uzantı kodunuzda, Manifest V2 arka plan komut dosyanıza ekleyeceğinizden farklı değişiklikler yapılmasını gerektirir.
Manifest V3'teki işlemler, tarayıcı işlemlerine en çok benzeyen işlemlerdir. Ancak action API, pageAction'ün sağladığı hide() ve show() işlevlerini sağlamaz. Sayfa işlemlerine hâlâ ihtiyacınız varsa bildirimli içerik kullanarak bunları taklit edebilir veya bir sekme kimliğiyle enable() ya da disable() işlevini çağırabilirsiniz.
"browser_action" ve "page_action" yerine "action" kullanın.
manifest.json içinde "browser_action" ve "page_action" alanlarını "action" alanı ile değiştirin. "action" alanı hakkında bilgi 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'nizde browserAction ve pageAction API'lerini kullandığınız yerlerde artık action API'sini kullanmanız gerekir.
browser.browserAction.onClicked.addListener(tab => { ... }); browser.pageAction.onClicked.addListener(tab => { ... });
browser.action.onClicked.addListener(tab => { ... });
Geri çağırmaları sözlerle değiştirme
Manifest V3'te birçok uzantı API yöntemi söz döndürür. Promise, eşzamansız bir yöntem tarafından döndürülen değerin proxy'si veya yer tutucusudur. Promises'ı hiç kullanmadıysanız MDN'de bu konu hakkında bilgi edinebilirsiniz. Bu sayfada, bunları 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. İkisini de aynı işlev çağrısında kullanamayacağınızı unutmayın. Geri çağırma işlevi iletirseniz işlev bir söz döndürmez. Söz döndürülmesini istiyorsanız geri çağırma işlevi iletmeyin. Etkinlik dinleyicileri gibi bazı API özellikleri geri çağırma işlevleri gerektirmeye devam edecektir. Bir yöntemin sözleri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini bulun.
Geri çağırmadan 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, özellikle newtab.js isteğe bağlı izinler örneğinden alınmıştır. Geri çağırma sürümünde, örnekteki request() işlevine yapılan çağrının geri çağırma ile nasıl görüneceği gösterilir. Promise sürümünün async ve await ile yeniden yazılabileceğini unutmayın.
browser.permissions.request(newPerms, (granted) => { if (granted) { console.log('granted'); } else { console.log('not granted'); } });
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ı hizmeti çalışanlarıyla yalnızca mesaj iletme yoluyla etkileşimde bulunabilir. 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 iletme özelliğini kullanmalıdır. Şu anda bu işlem, sendMessage() kullanılarak ve uzantı hizmeti çalışanı içinde browser.runtime.onMessage uygulanarak gerçekleştirilebilir. Uzun vadede, bu çağrıları postMessage() ve bir hizmet çalışanının mesaj etkinlik 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 söz döndürdüğü yerlerde 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ı hizmeti çalışanlarında desteklenmez. Bunun yerine beforeunload belge 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 |