Diğer sorunlarla ilgisi olmayan güncellemeler
Bu, uzantı hizmet işçisinin parçası olmayan kod için gereken değişiklikleri açıklayan üç bölümden ilkidir. Bu bölüm, diğer sorunlarla alakalı olmayan zorunlu kod değişiklikleri içindir. Sonraki iki bölümde web isteklerinin engellenmesini değiştirme ve güvenliği iyileştirme konuları ele alınmaktadır.
tabs.executeScript() işlevini scripting.executeScript() ile değiştirin.
Manifest V3'te executeScript()
, tabs
API'den scripting
API'ye taşınır. 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 gerekenler:
"scripting"
izni.- Ana makine izinleri veya
"activeTab"
izni.
scripting.executeScript()
yöntemi, tabs.executeScript()
ile çalışma şekline benzer. Aralarında birkaç fark vardır.
- Eski yöntem yalnızca tek bir dosya alabiliyorken, yeni yöntemde bir dizi dosya alınabilir.
- Ayrıca,
InjectDetails
yerine birScriptInjection
nesnesi iletmiş olursunuz. Bu iki yöntem arasında birden fazla fark vardır. Örneğin,tabId
artık bir yöntem bağımsız değişkeni yerineScriptInjection.target
'un bir üyesi olarak iletiliyor.
Örnekte bunun nasıl yapılacağı gösterilmektedir.
async function getCurrentTab() {/* ... */} let tab = await getCurrentTab(); chrome.tabs.executeScript( tab.id, { file: 'content-script.js' } );
Arka plan komut dosyası dosyasında.
async function getCurrentTab() let tab = await getCurrentTab(); chrome.scripting.executeScript({ target: {tabId: tab.id}, files: ['content-script.js'] });
Uzantı hizmet çalışanında.
tabs.insertCSS() ve tabs.removeCSS() işlevlerini scripting.insertCSS() ve scripting.removeCSS() işlevleriyle değiştirin
Manifest V3'te insertCSS()
ve removeCSS()
, tabs
API'den scripting
API'ye taşınır. 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. Aralarında birkaç fark vardır.
- Bu yöntemleri çağırırken
InjectDetails
yerine birCSSInjection
nesnesi iletmeniz gerekir. tabId
artık bir yöntem bağımsız değişkeni yerineCSSInjection.target
öğesinin bir üyesi olarak iletiliyor.
Örnekte, bu işlemin insertCSS()
için nasıl yapılacağı gösterilmektedir. removeCSS()
için prosedür aynıdır.
chrome.tabs.insertCSS(tabId, injectDetails, () => { // callback code });
Arka plan komut dosyası dosyasında.
const insertPromise = await chrome.scripting.insertCSS({ files: ["style.css"], target: { tabId: tab.id } }); // Remaining code.
Uzantı hizmet ç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ı. Başlangıçta farklı rollere sahip olsalar da zamanla aralarındaki farklar azaldı. Manifest V3'te bu kavramlar Action API'sinde birleştirilmiştir. 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ı hakkında bilgi için referansı inceleyin.
{ ... "page_action": { ... }, "browser_action": { "default_popup": "popup.html" } ... }
{ ... "action": { "default_popup": "popup.html" } ... }
BrowserAction ve pageAction API'lerini işlem API'si ile değiştirin
Manifest V2'nizde browserAction
ve pageAction
API'leri kullanılıyorduysa artık action
API'sini kullanmanız gerekir.
chrome.browserAction.onClicked.addListener(tab => { ... }); chrome.pageAction.onClicked.addListener(tab => { ... });
chrome.action.onClicked.addListener(tab => { ... });
Geri çağırma işlevlerini sözle değiştirme
Manifest V3'te birçok uzantı API yöntemi, söz döndürür. 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, promise desteği eklendikten sonra geri çağırma işlevini 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 taahhüt döndürmez. Ayrıca, döndürülen bir sözü istiyorsanız geri çağırmayı iletmez. Etkinlik dinleyicileri gibi bazı API özellikleri için geri çağırma işlevi gerekli olmaya devam edecektir. Bir yöntemin promise'leri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini bulun.
Geri çağırma işlevini bir promise'e dönüştürmek için geri çağırma işlevini kaldırın ve döndürülen promise'i işleyin. 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.
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ı gerektiren işlevleri değiştirme
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, bir hizmet çalışanı ile uzantınızın diğer bölümleri arasında iletişim kurmak için mesaj aktarımı 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 etkinlik işleyicisiyle değiştirmeyi planlamanız gerekir.
Desteklenmeyen API'leri değiştirin
Aşağıda listelenen yöntemlerin ve özelliklerin Manifest V3'te değiştirilmesi gerekir.
Manifest V2 yöntemi veya mülkü | Ş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 |