Başka sorunlarla ilgisi olmayan güncellemeler
Bu, uzantı hizmet çalışanının parçası olmayan kod için gerekli değişiklikleri açıklayan üç bölümden 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 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ışmasına benzer. Birkaç farklılık vardır.
- Eski yöntem yalnızca tek bir dosya alabilirken, yeni yöntem bir dosya dizisi alabilir.
InjectDetails
yerine birScriptInjection
nesnesi de iletiyorsunuz. İkisi arasında birden çok fark vardır. Örneğin,tabId
artık yöntem bağımsız değişkeni yerineScriptInjection.target
öğesinin üyesi olarak iletilir.
Ö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'] });
shortcuts.insertCSS() ve tab.removeCSS() öğelerini,scripting.insertCSS() vescripting.removeCSS() ile değiştirin
Manifest V3'te, insertCSS()
ve removeCSS()
, tabs
API'den scripting
API'ye geçiyor. Bu işlem, 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ç farklılık vardır.
- Bu yöntemleri çağırırken
InjectDetails
yerine birCSSInjection
nesnesi geçirirsiniz. tabId
artık yöntem bağımsız değişkeni yerineCSSInjection.target
öğesinin ü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ştirme
Tarayıcı işlemleri ve sayfa işlemleri, Manifest V2'de ayrı kavramlardır. İşe farklı rollerle başlamış olsalar da aralarındaki farklar zamanla azaldı. Manifest V3'te bu kavramlar İşlem API'sinde 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 en çok benzer. Ancak action
API'si, pageAction
tarafından yapılan 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ını yapabilirsiniz.
"browser_action" ve "page_action" değerlerini "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" } ... }
tarayıcı_işlemi ve pageAction API'lerini action API ile değiştirme
Manifest V2'niz browserAction
ve pageAction
API'lerini kullandığında 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ı taahhütlerle değiştirin
Manifest V3'te birçok uzantı API yöntemi vaatler verir. Promise, eşzamansız bir yöntem tarafından döndürülen bir değerin proxy'si veya yer tutucusudur. Promise'leri hiç kullanmadıysanız MDN'de bunlar hakkında 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, söz 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 bir sözün döndürülmesini istiyorsanız geri çağırmayı geçemez. Etkinlik işleyiciler gibi bazı API özellikleri için geri çağırma kullanılması gerekecektir. Bir yöntemin vaatleri destekleyip desteklemediğini kontrol etmek için API referansında "Promise" etiketini bulun.
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ü, bir geri çağırmayla örneğin request()
çağrısının nasıl görüneceğini gösterir. Vadedilen sürümün eşzamansız ve bekleme süresiyle yeniden yazılabileceğ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ı bekleyen 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, arka plan bağlamı bekleyen aramaları, özellikle:
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 iletme özelliğini kullanmalıdır. Şu anda bu, sendMessage()
kullanımını ve uzantı hizmeti çalışanınızda chrome.runtime.onMessage
uygulamasının uygulanmasını gerektirir. Uzun vadede, bu aramaları postMessage()
ve bir hizmet çalışanının mesaj etkinlik işleyicisi ile değiştirmeyi planlamanız gerekir.
Desteklenmeyen API'leri değiştirin
Aşağıda listelenen yöntemler 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 vaat ettiği yerlerde 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.onRequest |
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 |