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 birScriptInjection
nesnesi iletmiş olursunuz. İkisi arasında birçok fark vardır. ÖrneğintabId
artık bir yöntem bağımsız değişkeni yerineScriptInjection.target
öğesinin 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' } );
async function getCurrentTab() let tab = await getCurrentTab(); chrome.scripting.executeScript({ target: {tabId: tab.id}, files: ['content-script.js'] });
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 birCSSInjection
nesnesi iletirsiniz. tabId
artık bir yöntem bağımsız değişkeni yerineCSSInjection.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.
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ş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.
{ ... "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'nizin browserAction
ve pageAction
API'lerini kullandığı durumlarda 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 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.
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ı 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 |