webRequest删除附加到tabId的侦听器

时间:2017-09-16 11:26:33

标签: javascript google-chrome-extension firefox-addon firefox-webextensions

在我的网络扩展程序中,我根据用户告诉扩展程序要做的事情,将多个相同的侦听器添加到不同的标签ID中。
@echo off setlocal enableextensions enabledelayedexpansion set "pdftk=C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe" set "Source=C:\test" set "Target=C:\test\test2" set num=2 set filenumber=1 for /F "tokens=1,2 delims=:" %%f in ( 'dir /b /a-d "%source%\*.pdf" ^| findstr /n "^" ' ) do if %%f leq %num% ( copy "%source%\%%g" "%target%" /y > nul ) else goto endCopy :endCopy endlocal for /F "tokens=1,2 delims=:" %%f in ( 'dir /b /a-d "%target%\*.pdf" ^|findstr /n "^" ' ) do if %%f leq %filenumber% set file=%%~nf PushD "%Target%" "%pdftk%" *.pdf cat output we_19_9_2017_%file%.pdf PopD

但是当我需要清理一个标签的监听器时,我不知道如何指定哪个监听器,文档说removeListener只接受一个参数即回调。
browser.webRequest.onBeforeRequest.addListener(mycallback, {urls: ["myurl"], tabId: varyingtabid},["blocking"]);

1 个答案:

答案 0 :(得分:1)

根据api_event_listeners.cc(link)中的源代码,removeListener删除指定侦听器的所有注册,而不管用于添加该侦听器的过滤器。

那是因为你不能用不同的过滤器(link)多次添加同一个监听器:

    // Note that we only consider the listener function here, and not the
    // filter. This implies that it's invalid to try and add the same
    // function for multiple filters.
    // TODO(devlin): It's always been this way, but should it be?

换句话说,每次使用相同的函数引用调用addListener时,它都是no-op

注意,如果你在另一个函数中声明回调,那么回调引用每次都会有所不同,因为在JS function name() {}中等同于var name = function () {},并且在第一个之前声明了它的便利性包含功能的陈述。