Diğer sorunlarla ilgisi olmayan güncellemeler
Bu, uzantı hizmet ç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 gerekli kod değişiklikleri içindir. Sonraki iki bölümde engelleme web isteklerini değiştirme ve güvenliği artırma konuları ele alınmaktadır.
tabs.executeScript() yerine scripting.executeScript() kullanın
Manifest V3'te executeScript(), tabs API'sinden scripting API'sine 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 alabilirken yeni yöntem bir dizi dosya alabilir.
- Ayrıca
InjectDetailsyerine birScriptInjectionnesnesi de iletirsiniz. İkisi arasında birden fazla fark vardır. Örneğin,tabIdartık bir yöntem bağımsız değişkeni yerineScriptInjection.targetüyesi olarak iletilir.
Örnekte bunun nasıl yapılacağı gösterilmiştir.
async function getCurrentTab() {/* ... */} let tab = await getCurrentTab(); browser.tabs.executeScript( tab.id, { file: 'content-script.js' } );
Arka plan komut dosyası dosyasında.
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() yerine scripting.insertCSS() ve scripting.removeCSS() kullanın
Manifest V3'te insertCSS() ve removeCSS(), tabs API'sinden scripting API'sine taşınır. Bu, 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ç fark vardır.
- Bu yöntemleri çağırırken
InjectDetailsyerine birCSSInjectionnesnesi iletirsiniz. tabIdartık yöntem bağımsız değişkeni yerineCSSInjection.targetüyesi olarak iletilir.
Ö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ı dosyasında.
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'ni İşlemler ile değiştirme
Tarayıcı işlemleri ve sayfa işlemleri, Manifest V2'de ayrı kavramlardı. Farklı rollerle başlasalar da aralarındaki farklar zamanla azaldı. Manifest V3'te bu kavramlar Action API'de birleştirilmiştir. Bu işlem, manifest.json ve uzantı kodunuzda, Manifest V2 arka plan komut dosyanıza ekleyeceğinizden farklı değişiklikler yapmanızı gerektirir.
Manifest V3'teki işlemler, tarayıcı işlemlerine çok benzer. Ancak action API'si, pageAction'nin yaptığı gibi hide() ve show() sağlamaz. Sayfa işlemlerine hâlâ ihtiyacınız varsa bunları açıklayıcı içerik kullanarak taklit edebilir veya sekme kimliğiyle enable() ya da disable() yöntemini çağırabilirsiniz.
"browser_action" ve "page_action" yerine "action" kullanın
manifest.json içinde "browser_action" ve "page_action" alanlarını "action" alanıyla 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'nizin browserAction ve pageAction API'lerini kullandığı durumlarda artık action API'yi kullanmanız gerekir.
browser.browserAction.onClicked.addListener(tab => { ... }); browser.pageAction.onClicked.addListener(tab => { ... });
browser.action.onClicked.addListener(tab => { ... });
Geri çağırmaları Promise'lerle değiştirme
Manifest V3'te, birçok uzantı API yöntemi promise döndürür. Promise, eşzamansız bir yöntem tarafından döndürülen değer için bir proxy veya yer tutucudur. Daha önce hiç Promise kullanmadıysanız MDN'de bu konuyla 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ğırmaları desteklemeye devam eder. Aynı işlev çağrısında ikisini birden kullanamayacağınızı unutmayın. Geri çağırma işlevi iletirseniz işlev bir Promise döndürmez. Promise döndürülmesini istiyorsanız geri çağırma işlevi iletmeyin. Etkinlik işleyiciler gibi bazı API özellikleri için geri çağırmalar kullanılmaya devam edecektir. Bir yöntemin Promise'leri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini arayın.
Geri çağırmayı 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, isteğe bağlı izinler örneğinden, özellikle de newtab.js dosyasından 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. 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ı hizmet çalışanlarıyla yalnızca mesaj iletimi kullanarak etkileşim kurabilir. 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 iletimini kullanmalıdır. Şu anda bu işlem, uzantı hizmet çalışanınızda sendMessage() kullanılarak ve browser.runtime.onMessage uygulanarak yapılabilir. Uzun vadede bu çağrıları postMessage() ve hizmet çalışanının mesaj etkinliği 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 promise döndürdüğü durumlarda 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ı hizmet çalışanlarında desteklenmez. Bunun yerine beforeunload doküman 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 |