在我的网络扩展程序中,我根据用户告诉扩展程序要做的事情,将多个相同的侦听器添加到不同的标签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"]);
答案 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 () {}
,并且在第一个之前声明了它的便利性包含功能的陈述。