说明
使用 chrome.documentScan
API 从连接的文件扫描器中发现和检索图片。
Document Scan API 旨在让应用和扩展程序在附加的文件扫描器上查看纸质文档的内容。
权限
documentScan
可用性
概念和用法
此 API 支持两种文档扫描方式。如果您的用例适用于任何扫描器,并且不需要控制配置,请使用 scan()
方法。更复杂的用例需要组合使用方法,而只有 Chrome 124 及更高版本支持这些方法。
简单扫描
对于简单的用例(即适用于任何扫描器且不需要控制配置的情况),请调用 scan()
。此方法接受一个 ScanOptions
对象,并返回使用 ScanResults
对象解析的 Promise。此选项的功能仅限于调用方接受的扫描次数和 MIME 类型。扫描结果会以网址形式返回,以便在界面的 <img>
标记中显示。
复杂扫描
如本部分所述,复杂的扫描分三个阶段完成。本概述并未介绍响应中返回的每个方法参数或属性,本文档只是为您提供有关如何编写扫描器代码的一般指南。
发现广告
调用
getScannerList()
。可用的扫描器会在使用GetScannerListResponse
解析的 Promise 中返回。- 响应对象包含
ScannerInfo
对象的数组。 - 如果该扫描程序支持多种协议或连接方法,则数组可能会包含多个针对单个扫描程序的条目。
- 响应对象包含
从返回的数组中选择扫描程序,并保存其
scannerId
属性的值。使用各个
ScannerInfo
对象的属性来区分同一扫描器的多个对象。来自同一扫描器的对象将具有相同的deviceUuid
属性值。ScannerInfo
还包含一个imageFormats
属性,该属性包含受支持图片类型的数组。
扫描仪配置
调用
openScanner()
,并传入已保存的扫描器 ID。它会返回一个使用OpenScannerResponse
解析的 Promise。响应对象包含:您需要保存的
scannerHandle
属性。包含您需要设置的扫描器专用属性的 options 属性。请参阅“检索扫描程序选项”了解更多信息。
(可选)如果您需要用户提供扫描程序选项的值,请构建一个界面。您将需要上一步中提供的扫描器选项,并且需要检索该扫描器提供的选项组。如需了解详情,请参阅构建界面。
使用程序化值或用户提供的值构造
OptionSetting
对象数组。如需了解详情,请参阅“设置扫描器选项”。将
OptionSetting
对象数组传递给setOptions()
,以便为扫描程序设置选项。它会返回一个使用SetOptionsResponse
进行解析的 Promise。此对象包含在扫描程序配置第 1 步中检索到的扫描程序选项的更新版本。由于更改一个选项可能会改变另一个选项的约束条件,因此您可能需要多次重复这些步骤。
扫描
构造一个
StartScanOptions
对象并将其传递给startScan()
。它会返回使用StartScanResponse
解析的 Promise。它的job
属性是一个句柄,将用于读取扫描数据或取消扫描。将作业句柄传递给
readScanData()
。它会返回一个使用ReadScanDataResponse
对象解析的 Promise。如果数据被成功读取,则其result
属性等于SUCCESS
,并且其data
属性包含ArrayBuffer
,其中包含该扫描的一部分。请注意,estimatedCompletion
包含目前已传送的总数据的百分比估算值。重复上一步,直到
result
属性等于EOF
或出现错误。
扫描结束时,请使用第 3 步中保存的扫描器句柄来调用 closeScanner()
。它会返回一个使用 CloseScannerResponse
解析的 Promise。创建作业后的任何时间调用 cancelScan()
都会结束扫描。
响应对象
所有方法都将返回一个使用某种响应对象进行解析的 Promise。其中大多数都包含一个 result
属性,其值为 OperationResult
的成员。除非 result
的值具有特定值,否则响应对象的某些属性不会包含值。每个响应对象的参考文档中介绍了这些关系。
例如,仅当 OpenScannerResponse.result
等于 SUCCESS
时,OpenScannerResponse.scannerHandle
才具有值。
扫描仪选项
扫描仪选项因设备而异。因此,无法直接在 documentScan API 中反映扫描器选项。为了解决此问题,OpenScannerResponse
(使用 openScanner()
进行检索)和 SetOptionsResponse
(setOptions()
的响应对象)包含 options
属性,该属性是一个包含扫描器专用选项的对象。每个选项都是一个键值对映射,其中键是设备专属选项,值是 ScannerOption
的实例。
其结构通常如下所示:
{
"key1": { scannerOptionInstance }
"key2": { scannerOptionInstance }
}
例如,假设有一个扫描程序,它会返回名为“source”和“Resolution”的选项。返回的 options
对象的结构类似于以下示例。为简单起见,仅显示部分 ScannerOption
响应。
{
"source": {
"name": "source",
"type": OptionType.STRING,
...
},
"resolution": {
"name": "resolution",
"type": OptionType.INT,
...
},
...
}
构建界面
虽然并非必须使用此 API,但您可能希望用户选择特定选项的值。这需要界面。使用 OpenScannerResponse
(由 openScanner()
打开)检索所连接扫描器的选项,如上一部分中所述。
某些扫描程序会以设备专属的方式对选项进行分组。它们不会影响选项行为,但由于可能会在扫描器的产品文档中提及这些组,因此应向用户显示此类组。您可以通过调用 getOptionGroups()
来检索这些群组。这将返回一个使用 GetOptionGroupsResponse
对象解析的 Promise。其 groups
属性包含特定于扫描程序的组数组。请使用这些组中的信息来整理 OpenScannerResponse
中要显示的选项。
{
scannerHandle: "123456",
result: SUCCESS,
groups: [
{
title: "Standard",
members: [ "resolution", "mode", "source" ]
}
]
}
如扫描器配置中所述,更改一个选项可能会改变另一个选项的约束条件。因此,setOptionsResponse
(setOptions()
的响应对象)包含另一个 options
属性。使用此方法更新界面。然后根据需要重复操作,直到设置完所有选项。
设置扫描器选项
通过将 OptionSetting
对象数组传递给 setOptions()
来设置扫描器选项。如需查看示例,请参阅以下扫描一个字母大小的页面部分。
示例
将页面作为 Blob 检索
此示例展示了一种以 blob 形式从扫描仪检索页面的方法,并演示了如何通过 OperationResult
的值使用 startScan()
和 readScanData()
。
async function pageAsBlob(handle) {
let response = await chrome.documentScan.startScan(
handle, {format: "image/jpeg"});
if (response.result != chrome.documentScan.OperationResult.SUCCESS) {
return null;
}
const job = response.job;
let imgParts = [];
response = await chrome.documentScan.readScanData(job);
while (response.result == chrome.documentScan.OperationResult.SUCCESS) {
if (response.data && response.data.byteLength > 0) {
imgParts.push(response.data);
} else {
// Delay so hardware can make progress.
await new Promise(r => setTimeout(r, 100));
}
response = await chrome.documentScan.readScanData(job);
}
if (response.result != chrome.documentScan.OperationResult.EOF) {
return null;
}
if (response.data && response.data.byteLength > 0) {
imgParts.push(response.data);
}
return new Blob(imgParts, { type: "image/jpeg" });
}
扫描一个字母大小的页面
此示例展示了如何选择扫描仪、设置其选项并打开扫描器。然后,它会检索单个页面的内容并关闭扫描器。演示了如何使用 getScannerList()
、openScanner()
、setOptions()
和 closeScanner()
。请注意,系统会通过调用上一示例中的 pageAsBlob()
函数来检索页面内容。
async function scan() {
let response = await chrome.documentScan.getScannerList({ secure: true });
let scanner = await chrome.documentScan.openScanner(
response.scanners[0].scannerId);
const handle = scanner.scannerHandle;
let options = [];
for (source of scanner.options["source"].constraint.list) {
if (source.includes("ADF")) {
options.push({
name: "source",
type: chrome.documentScan.OptionType.STRING,
value: { value: source }
});
break;
}
}
options.push({
name: "tl-x",
type: chrome.documentScan.OptionType.FIXED,
value: 0.0
});
options.push({
name: "br-x",
type: chrome.documentScan.OptionType.FIXED,
value: 215.9 // 8.5" in mm
});
options.push({
name: "tl-y",
type: chrome.documentScan.OptionType.FIXED,
value: 0.0
});
options.push({
name: "br-y",
type: chrome.documentScan.OptionType.FIXED,
value: 279.4 // 11" in mm
});
response = await chrome.documentScan.setOptions(handle, options);
let imgBlob = await pageAsBlob(handle);
if (imgBlob != null) {
// Insert imgBlob into DOM, save to disk, etc
}
await chrome.documentScan.closeScanner(handle);
}
显示配置
如其他部分所述,除了调用 openScanner()
返回的扫描程序选项之外,向用户显示扫描程序的配置选项还需要调用 getOptionGroups()
。这样,就可以向制造商定义的组中的用户显示选项。以下示例展示了如何执行此操作。
async function showConfig() {
let response = await chrome.documentScan.getScannerList({ secure: true });
let scanner = await chrome.documentScan.openScanner(
response.scanners[0].scannerId);
let groups = await chrome.documentScan.getOptionGroups(scanner.scannerHandle);
for (const group of groups.groups) {
console.log("=== " + group.title + " ===");
for (const member of group.members) {
const option = scanner.options[member];
if (option.isActive) {
console.log(" " + option.name + " = " + option.value);
} else {
console.log(" " + option.name + " is inactive");
}
}
}
}
类型
CancelScanResponse
属性
-
作业
string
提供传递给
cancelScan()
的作业句柄。 -
后端的取消扫描结果。如果结果为
OperationResult.SUCCESS
或OperationResult.CANCELLED
,则表示扫描已取消,扫描器已准备好开始新的扫描。如果结果为OperationResult.DEVICE_BUSY
,则扫描器仍在处理请求的取消操作;调用方应等待一小段时间,然后重试该请求。其他结果值表示出现不应重试的永久性错误。
CloseScannerResponse
属性
-
关闭扫描程序的结果。即使此值不是
SUCCESS
,句柄也无效,并且不应将其用于任何其他操作。 -
scannerHandle
string
与传递给
closeScanner
的扫描器句柄相同。
Configurability
如何更改选项。
枚举
"NOT_CONFIGURABLE"
此选项为只读。
"SOFTWARE_CONFIGURABLE"
可以在软件中设置此选项。
"HARDWARE_CONFIGURABLE"
用户可通过切换或按下扫描仪上的按钮来设置此选项。
ConnectionType
指示扫描仪与计算机之间的连接方式。
枚举
"UNSPECIFIED"
枚举
"INT_RANGE"
对 OptionType.INT
值范围的约束条件。OptionConstraint
的 min
、max
和 quant
属性将为 long
,并且其 list
属性将未设置。
"FIXED_RANGE"
对 OptionType.FIXED
值范围的约束条件。OptionConstraint
的 min
、max
和 quant
属性将为 double
,并且其 list
属性将取消设置。
"INT_LIST"
对特定的 OptionType.INT
值列表的约束条件。OptionConstraint.list
属性将包含 long
值,其他属性将未设置。
"FIXED_LIST"
对特定的 OptionType.FIXED
值列表的约束条件。OptionConstraint.list
属性将包含 double
值,其他属性将未设置。
"STRING_LIST"
对特定的 OptionType.STRING
值列表的约束条件。OptionConstraint.list
属性将包含 DOMString
值,其他属性将未设置。
DeviceFilter
属性
-
局部
布尔值 选填
仅退回直接连接到计算机的扫描仪。
-
安全
布尔值 选填
仅返回使用安全传输(如 USB 或 TLS)的扫描仪。
GetOptionGroupsResponse
属性
-
组
OptionGroup[] 可选
如果
result
为SUCCESS
,则按照扫描程序驱动程序指定的顺序提供选项组列表。 -
获取选项组的结果。如果此值为
SUCCESS
,系统将会填充groups
属性。 -
scannerHandle
string
与传递给
getOptionGroups
的扫描器句柄相同。
GetScannerListResponse
属性
-
枚举结果。请注意,即使这表示存在错误,也可能返回部分结果。
-
扫描仪
与提供的
DeviceFilter
匹配的扫描程序列表,该列表可能为空。
OpenScannerResponse
属性
-
选项
对象(可选)
如果
result
为SUCCESS
,则提供键值对映射,其中键是设备专属选项,值为ScannerOption
的实例。 -
打开扫描程序的结果。如果此值为
SUCCESS
,系统将会填充scannerHandle
和options
属性。 -
scannerHandle
字符串(可选)
如果
result
为SUCCESS
,则为扫描器的句柄,可用于进一步操作。 -
scannerId
string
传递给
openScanner()
的扫描程序 ID。
OperationResult
指示每个操作的结果的枚举。
枚举
"UNKNOWN"
发生未知或一般性故障。
"SUCCESS"
操作成功。
"UNSUPPORTED"
不支持该操作。
"CANCELLED"
操作已取消。
"DEVICE_BUSY"
设备正忙。
"INVALID"
传递给此方法的数据或参数无效。
"WRONG_TYPE"
提供的值是基础选项的数据类型错误。
"EOF"
没有更多数据可用。
"ADF_JAMMED"
文件馈送器卡住。
"ADF_EMPTY"
文件馈送器为空。
"COVER_OPEN"
平板盖已打开。
"IO_ERROR"
与设备通信时出错。
"ACCESS_DENIED"
设备要求进行身份验证。
"NO_MEMORY"
Chromebook 没有足够的内存来完成操作。
"UNREACHABLE"
设备无法访问。
"MISSING"
设备已断开连接。
"INTERNAL_ERROR"
在调用程序以外的地方出现错误。
OptionConstraint
属性
-
list
string[] | number[] 可选
-
max
数字可选
-
分钟
数字可选
-
定量
数字可选
OptionGroup
属性
-
成员
字符串[]
按驱动程序提供顺序的选项名称数组。
-
title
string
提供可打印的标题,例如“几何图形选项”。
OptionSetting
属性
-
name
string
指示要设置的选项的名称。
-
类型
表示选项的数据类型。请求的数据类型必须与底层选项的实际数据类型一致。
-
值
字符串 | 数字 | 布尔值 | 数字 [] 可选
指示要设置的值。如果未设置,系统会请求自动设置已启用
autoSettable
的选项。为value
提供的数据类型必须与type
一致。
OptionType
选项的数据类型。
枚举
"UNKNOWN"
选项的数据类型未知。value
属性将取消设置。
"BOOL"
value
属性将为 true
false。
"INT"
一个有符号的 32 位整数。value
属性将为 long[] 或 long[],具体取决于选项是否采用多个值。
"FIXED"
介于 -32768-32767.9999 之间的双精度浮点值,分辨率为 1/65535。value
属性将为 double 或 double[],具体取决于选项是否使用多个值。无法精确表示的双精度值将四舍五入为可用范围和精度。
"STRING"
除 NUL ('\0') 以外的任何字节的序列。value
属性将是一个 DOMString。
"BUTTON"
此类型的选项没有值。相反,设置该类型的选项会在扫描程序驱动程序中产生特定于选项的副作用。例如,扫描仪驱动程序可以使用按钮式选项来提供选择默认值的方法,或指示自动文件馈送器前进到下一张纸。
“GROUP”
分组选项。没有值。包含是为了兼容性,但通常不会在 ScannerOption
值中返回。使用 getOptionGroups()
检索群组列表及其成员选项。
枚举
"UNITLESS"
该值是一个没有单位的数字。例如,可以是阈值。
"PIXEL"
该值是一个像素数,例如扫描尺寸。
"BIT"
该值是位数,例如色深。
"MM"
该值以毫米为单位,例如扫描尺寸。
"DPI"
该值以每英寸的点数为单位,例如分辨率。
"PERCENT"
该值是一个百分比,例如亮度。
"MICROSECOND"
该值以微秒为单位,例如曝光时间。
ReadScanDataResponse
属性
-
data
ArrayBuffer 可选
如果
result
为SUCCESS
,则包含扫描图片数据的下一个分块。如果result
为EOF
,则包含扫描图片数据的最后一个块。 -
estimatedCompletion
数字可选
如果
result
为SUCCESS
,则表示目前已传送了多少总扫描数据(范围为 0 到 100)。 -
作业
string
提供传递给
readScanData()
的作业句柄。 -
读取数据的结果。如果此字段的值为
SUCCESS
,则data
包含已准备好读取的下一个(长度可能为零)图片数据块。如果其值为EOF
,则data
包含图像数据的最后一个块。
ScannerInfo
属性
-
connectionType
指示扫描仪与计算机之间的连接方式。
-
deviceUuid
string
用于匹配指向同一实体设备的其他
ScannerInfo
条目。 -
imageFormats
字符串[]
可以为返回的扫描请求 MIME 类型的数组。
-
制造商
string
扫描仪制造商。
-
model
string
扫描仪型号(如果有),或一般性说明。
-
name
string
要在界面中显示的扫描器的直观易懂的名称。
-
protocolType
string
用于访问扫描仪的协议或驱动程序的人类可读说明,例如 Mopria、WSD 或 epsonds。这主要适用于允许用户在支持多种协议的协议之间进行选择。
-
scannerId
string
特定扫描程序的 ID。
-
安全
boolean
如果为 true,扫描程序连接的传输不会被被动监听器(如 TLS 或 USB)拦截。
ScannerOption
属性
-
可配置性
指示是否可以更改此选项以及如何更改。
-
项限制条件
定义当前扫描器选项的
OptionConstraint
。 -
说明
string
选项的详细描述。
-
isActive
boolean
表示选项有效,可以设置或检索。如果为 false,则将不会设置
value
属性。 -
isAdvanced
boolean
表示默认情况下界面不应显示此选项。
-
isAutoSettable
boolean
可由扫描仪驱动程序自动设置。
-
isDetectable
boolean
表示可以从软件中检测到此选项。
-
isEmulated
boolean
如果为 true,则由扫描器驱动程序进行模拟。
-
name
string
使用小写 ASCII 字母、数字和短划线的选项名称。不允许使用变音符号。
-
title
string
可打印的单行标题。
-
类型
value
属性中包含的数据类型,是设置此选项所需的类型。 -
单位
此选项的衡量单位。
-
值
字符串 | 数字 | 布尔值 | 数字 [] 可选
选项的当前值(如果相关)。请注意,此属性的数据类型必须与
type
中指定的数据类型一致。
ScanOptions
属性
-
maxImages
数字可选
允许的扫描图片数量。默认值为 1。
-
mimeTypes
string[] 可选
调用方接受的 MIME 类型。
ScanResults
属性
-
dataUrls
字符串[]
数据图片网址数组,采用的形式可作为“src”值传递给图片代码。
-
mimeType
string
dataUrls
的 MIME 类型。
SetOptionResult
属性
-
name
string
表示已设置的选项的名称。
-
表示设置选项的结果。
SetOptionsResponse
属性
-
选项
对象(可选)
尝试设置提供的所有选项后,更新了从选项名称到包含新配置的
ScannerOption
值的键值对映射。其结构与OpenScannerResponse
中的options
属性相同。即使某些选项设置失败,系统也会设置此属性;但如果无法检索更新后的配置(例如,如果扫描仪在扫描过程中断开连接),则该属性将取消设置。
-
结果
一个结果数组,每个传入
OptionSetting
对应一个结果。 -
scannerHandle
string
提供传递给
setOptions()
的扫描器句柄。
StartScanOptions
属性
-
格式
string
指定返回扫描数据的 MIME 类型。
-
maxReadSize
数字可选
如果指定非零值,则会将单个
readScanData
响应中返回的最大扫描字节数限制为该值。允许的最小值为 32768 (32 KB)。如果未指定此属性,则返回的分块的大小可能与整个扫描图像一样大。
StartScanResponse
属性
-
作业
字符串(可选)
如果
result
为SUCCESS
,则提供一个可用于读取扫描数据或取消作业的句柄。 -
启动扫描的结果。如果此值为
SUCCESS
,系统将会填充job
属性。 -
scannerHandle
string
提供传递给
startScan()
的扫描器句柄。
方法
cancelScan()
chrome.documentScan.cancelScan(
job: string,
callback?: function,
)
取消已启动的扫描,并返回使用 CancelScanResponse
对象解析的 Promise。如果使用回调,则改为向其传递该对象。
参数
-
作业
string
之前通过调用
startScan
返回的活跃扫描作业的句柄。 -
callback
函数(可选)
callback
参数如下所示:(response: CancelScanResponse) => void
返回
-
Promise<CancelScanResponse>
Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。
closeScanner()
chrome.documentScan.closeScanner(
scannerHandle: string,
callback?: function,
)
使用传入的句柄关闭扫描器,并返回使用 CloseScannerResponse
对象解析的 Promise。如果使用回调,则改为向其传递该对象。即使响应不成功,提供的句柄也会变为无效,并且不应用于进一步的操作。
参数
-
scannerHandle
string
指定之前通过调用
openScanner
返回的已打开扫描器的句柄。 -
callback
函数(可选)
callback
参数如下所示:(response: CloseScannerResponse) => void
返回
-
Promise<CloseScannerResponse>
Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。
getOptionGroups()
chrome.documentScan.getOptionGroups(
scannerHandle: string,
callback?: function,
)
从 openScanner
之前打开的扫描器获取群组名称和成员选项。此方法会返回使用 GetOptionGroupsResponse
对象解析的 promise。如果将回调函数传递给此函数,则返回的数据会改为传递给此函数。
参数
-
scannerHandle
string
调用
openScanner
后返回的已打开扫描器的句柄。 -
callback
函数(可选)
callback
参数如下所示:(response: GetOptionGroupsResponse) => void
返回
-
Promise<GetOptionGroupsResponse>
Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。
getScannerList()
chrome.documentScan.getScannerList(
filter: DeviceFilter,
callback?: function,
)
获取可用扫描器的列表,并返回使用 GetScannerListResponse
对象解析的 Promise。如果将回调函数传递给此函数,则返回的数据会改为传递给此函数。
参数
-
filter
DeviceFilter
,用于指示应返回哪些类型的扫描器。 -
callback
函数(可选)
callback
参数如下所示:(response: GetScannerListResponse) => void
返回
-
Promise<GetScannerListResponse>
Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。
openScanner()
chrome.documentScan.openScanner(
scannerId: string,
callback?: function,
)
打开独家访问扫描器,并返回使用 OpenScannerResponse
对象解析的 Promise。如果将回调函数传递给此函数,则返回的数据会改为传递给此函数。
参数
-
scannerId
string
要打开的扫描仪的 ID。此值是上一次调用
getScannerList
后返回的值。 -
callback
函数(可选)
callback
参数如下所示:(response: OpenScannerResponse) => void
返回
-
Promise<OpenScannerResponse>
Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。
readScanData()
chrome.documentScan.readScanData(
job: string,
callback?: function,
)
从活跃的作业句柄中读取下一个可用图片数据块,并返回使用 ReadScanDataResponse
对象解析的 Promise。如果使用回调,则改为向其传递该对象。
**注意:**包含长度为零的 data
成员的响应结果 SUCCESS
有效。这意味着扫描仪仍在运行,但尚未准备好其他数据。调用方应稍等片刻,然后重试。
扫描作业完成后,响应的结果值为 EOF
。此响应可能包含最终的非零 data
成员。
参数
-
作业
string
之前从
startScan
返回的有效作业句柄。 -
callback
函数(可选)
callback
参数如下所示:(response: ReadScanDataResponse) => void
返回
-
Promise<ReadScanDataResponse>
Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。
scan()
chrome.documentScan.scan(
options: ScanOptions,
callback?: function,
)
执行文档扫描,并返回使用 ScanResults
对象解析的 Promise。如果将回调函数传递给此函数,则返回的数据会改为传递给此函数。
参数
-
选项
包含扫描参数的对象。
-
callback
函数(可选)
callback
参数如下所示:(result: ScanResults) => void
-
结果
-
返回
-
Promise<ScanResults>
Chrome 96 及更高版本Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。
setOptions()
chrome.documentScan.setOptions(
scannerHandle: string,
options: OptionSetting[],
callback?: function,
)
在指定的扫描器上设置选项,并返回通过 SetOptionsResponse
对象进行解析的 Promise,该对象包含尝试按传入 OptionSetting
对象的顺序设置每个值的结果。如果使用回调,则改为向其传递该对象。
参数
-
scannerHandle
string
要设置选项的扫描器的手柄。这应该是之前调用
openScanner
返回的值。 -
选项
要应用于扫描程序的
OptionSetting
对象的列表。 -
callback
函数(可选)
callback
参数如下所示:(response: SetOptionsResponse) => void
返回
-
Promise<SetOptionsResponse>
Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。
startScan()
chrome.documentScan.startScan(
scannerHandle: string,
options: StartScanOptions,
callback?: function,
)
在指定的扫描器上启动扫描,并返回使用 StartScanResponse
解析的 Promise。如果使用回调,则改为向其传递该对象。如果调用成功,响应将包含一个作业句柄,该作业句柄可用于后续调用,以读取扫描数据或取消扫描。
参数
-
scannerHandle
string
打开的扫描仪的手柄。这应该是之前调用
openScanner
返回的值。 -
指示用于扫描的选项的
StartScanOptions
对象。StartScanOptions.format
属性必须与扫描程序的ScannerInfo
中返回的条目之一匹配。 -
callback
函数(可选)
callback
参数如下所示:(response: StartScanResponse) => void
返回
-
Promise<StartScanResponse>
Manifest V3 及更高版本支持 promise,但提供回调以实现向后兼容性。您不能在同一个函数调用中同时使用这两者。promise 使用传递给回调函数的同一类型进行解析。