###前提・実現したいこと
this.executをremoveListenerしたいのですがbind(this)をすると別の関数?になるみたいなでremoveListenerがうまくいきません。browser.tabs.onUpdated.removeListenerはWebExtensionsのイベントでonceオプションがないです。
javascript
1const Video = class { 2 async execute(tabId, changeInfo) { 3 // いろいろ処理をしたあと最後にremoveする 4 browser.tabs.onUpdated.removeListener(this.execute.bind(this)); 5 } 6 async onMessage(message) { 7 const storage = await browser.storage.local.get(); 8 browser.tabs.onUpdated.addListener(this.execute.bind(this)); 9 const [width, height] = [storage.width || 960, storage.height || 540]; 10 await browser.windows.create({ 11 url : this.getURL(message.url), 12 type : 'panel', 13 width : width, 14 height: height, 15 }); 16 } 17}; 18const a = new Video(); 19browser.runtime.onMessage.addListener(a.onMessage.bind(a));
命題に微妙なズレがあるのでは?removeEventListenerなのかremoveListenerなのか?addの方も微妙です
To: yambejp さん。MDN によれば、Firefox 拡張機能に removeListener なるメソッドが存在するようです。 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/onUpdated 私は詳しくありませんが、おそらく、[Firefox WebExtensions] のタグが該当するのでしょうか。