• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.url (URL字符串解析)
2<!--Kit: ArkTS-->
3<!--Subsystem: CommonLibrary-->
4<!--Owner: @xliu-huanwei; @shilei123; @huanghello-->
5<!--Designer: @yuanyao14-->
6<!--Tester: @kirl75; @zsw_zhushiwei-->
7<!--Adviser: @ge-yafang-->
8
9URL代表的是统一资源定位符,本模块提供了常用的工具函数,实现了解析URL字符串和构造[URL](#url)对象等功能。
10
11> **说明:**
12>
13> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14
15## 导入模块
16
17```ts
18import { url } from '@kit.ArkTS';
19```
20## URLParams<sup>9+</sup>
21
22URLParams是一个用于解析、构造和操作URL参数的实用类。该类提供了统一的接口来处理参数维度(如查询参数、路径参数等)。
23
24### constructor<sup>9+</sup>
25
26constructor(init?: string[][] | Record&lt;string, string&gt; | string | URLParams)
27
28URLParams的构造函数。
29
30**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
31
32**系统能力:** SystemCapability.Utils.Lang
33
34**参数:**
35
36| 参数名 | 类型 | 必填 | 说明 |
37| -------- | -------- | -------- | -------- |
38| init | string[][] \| Record&lt;string, string&gt; \| string \| URLParams | 否 | 入参对象。<br/>- string[][]:字符串二维数组。<br/>- Record&lt;string, string&gt;:对象列表。<br/>- string:字符串。<br/>- URLParams:对象。<br/>- 默认值:null。 |
39
40**错误码:**
41
42以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
43
44| 错误码ID | 错误信息 |
45| -------- | -------- |
46| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. |
47
48**示例:**
49
50```ts
51// 通过string[][]方式构造URLParams对象:
52let objectParams = new url.URLParams([ ['user1', 'abc1'], ['query2', 'first2'], ['query3', 'second3'] ]);
53// 通过Record<string, string>方式构造URLParams对象:
54let objectParams1 = new url.URLParams({"fod" : '1' , "bard" : '2'});
55// 通过string方式构造URLParams对象:
56let objectParams2 = new url.URLParams('?fod=1&bard=2');
57// 通过url对象的search属性构造URLParams对象:
58let urlObject = url.URL.parseURL('https://developer.mozilla.org/?fod=1&bard=2');
59let objectParams3 = new url.URLParams(urlObject.search);
60// 通过url对象的params属性获取URLParams对象:
61let urlObject1 = url.URL.parseURL('https://developer.mozilla.org/?fod=1&bard=2');
62let objectParams4 = urlObject1.params;
63```
64
65
66### append<sup>9+</sup>
67
68append(name: string, value: string): void
69
70将新的键值对插入到查询字符串。
71
72**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
73
74**系统能力:** SystemCapability.Utils.Lang
75
76**参数:**
77
78| 参数名 | 类型 | 必填 | 说明 |
79| -------- | -------- | -------- | -------- |
80| name | string | 是 | 需要插入搜索参数的键名。 |
81| value | string | 是 | 需要插入搜索参数的值。 |
82
83**错误码:**
84
85以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
86
87| 错误码ID | 错误信息 |
88| -------- | -------- |
89| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
90
91**示例:**
92
93```ts
94let urlObject = url.URL.parseURL('https://developer.exampleUrl/?fod=1&bard=2');
95let paramsObject = new url.URLParams(urlObject.search.slice(1));
96paramsObject.append('fod', '3');
97```
98
99
100### delete<sup>9+</sup>
101
102delete(name: string): void
103
104删除指定名称的键值对。
105
106**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
107
108**系统能力:** SystemCapability.Utils.Lang
109
110**参数:**
111
112| 参数名 | 类型 | 必填 | 说明 |
113| -------- | -------- | -------- | -------- |
114| name | string | 是 | 需要删除的键值名称。 |
115
116**错误码:**
117
118以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
119
120| 错误码ID | 错误信息 |
121| -------- | -------- |
122| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
123
124**示例:**
125
126```ts
127let urlObject = url.URL.parseURL('https://developer.exampleUrl/?fod=1&bard=2');
128let paramsObject = new url.URLParams(urlObject.search.slice(1));
129paramsObject.delete('fod');
130```
131
132
133### getAll<sup>9+</sup>
134
135getAll(name: string): string[]
136
137获取指定名称的所有键对应值的集合。
138
139**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
140
141**系统能力:** SystemCapability.Utils.Lang
142
143**参数:**
144
145| 参数名 | 类型 | 必填 | 说明 |
146| -------- | -------- | -------- | -------- |
147| name | string | 是 | 指定的键值名称。 |
148
149**返回值:**
150
151| 类型 | 说明 |
152| -------- | -------- |
153| string[] | 返回指定名称的所有键对应值的集合。 |
154
155**错误码:**
156
157以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
158
159| 错误码ID | 错误信息 |
160| -------- | -------- |
161| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
162
163**示例:**
164
165```ts
166let urlObject = url.URL.parseURL('https://developer.exampleUrl/?fod=1&bard=2');
167let params = new url.URLParams(urlObject.search.slice(1));
168params.append('fod', '3'); // Add a second value for the fod parameter.
169console.info(params.getAll('fod').toString()) // Output ["1","3"].
170```
171
172
173### entries<sup>9+</sup>
174
175entries(): IterableIterator<[string, string]>
176
177返回一个ES6的迭代器,迭代器的每一项都是一个Array。Array的第一项是name,Array的第二项是value。
178
179**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
180
181**系统能力:** SystemCapability.Utils.Lang
182
183**返回值:**
184
185| 类型 | 说明 |
186| -------- | -------- |
187| IterableIterator&lt;[string, string]&gt; | 返回一个ES6的迭代器。 |
188
189**示例:**
190
191```ts
192let paramsObject = new url.URLParams("keyName1=valueName1&keyName2=valueName2");
193let pair = paramsObject.entries();
194for (let item of pair) {
195    console.info(item[0] + '=' + item[1]);
196}
197// keyName1=valueName1
198// keyName2=valueName2
199```
200
201
202### forEach<sup>9+</sup>
203
204forEach(callbackFn: (value: string, key: string, searchParams: URLParams) => void, thisArg?: Object): void
205
206通过回调函数来遍历URLSearchParams实例对象上的键值对。
207
208**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
209
210**系统能力:** SystemCapability.Utils.Lang
211
212**参数:**
213
214| 参数名 | 类型 | 必填 | 说明 |
215| -------- | -------- | -------- | -------- |
216| callbackFn | function | 是 | 回调函数。 |
217| thisArg | Object | 否 | callbackFn被调用时用作this值,默认值是本对象。 |
218
219**表1** callbackFn的参数说明
220
221| 参数名 | 类型 | 必填 | 说明 |
222| -------- | -------- | -------- | -------- |
223| value | string | 是 | 当前遍历到的键值。 |
224| key | string | 是 | 当前遍历到的键名。 |
225| searchParams | [URLParams](#urlparams9) | 是 | 当前调用forEach方法的实例对象。 |
226
227**错误码:**
228
229以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
230
231| 错误码ID | 错误信息 |
232| -------- | -------- |
233| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
234
235**示例:**
236
237```ts
238const myURLObject = url.URL.parseURL('https://developer.exampleUrl/?fod=1&bard=2');
239myURLObject.params.forEach((value, name, searchParams) => {
240    console.info(name, value, myURLObject.params === searchParams);
241});
242```
243
244
245### get<sup>9+</sup>
246
247get(name: string): string | null
248
249获取指定名称对应的第一个值。
250
251> **说明:**
252>
253> 若查找一个不存在的键值对名称时返回值为undefined。
254
255**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
256
257**系统能力:** SystemCapability.Utils.Lang
258
259**参数:**
260
261| 参数名 | 类型 | 必填 | 说明 |
262| -------- | -------- | -------- | -------- |
263| name | string | 是 | 指定键值对的名称。 |
264
265**返回值:**
266
267| 类型 | 说明 |
268| -------- | -------- |
269| string \| null | 返回第一个值,如果没找到,返回 null。 |
270
271**错误码:**
272
273以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
274
275| 错误码ID | 错误信息 |
276| -------- | -------- |
277| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
278
279**示例:**
280
281```ts
282let paramsObject = new url.URLParams('name=Jonathan&age=18');
283let name = paramsObject.get("name"); // is the string "Jonathan"
284let age = paramsObject.get("age"); // is the string "18"
285let getObj = paramsObject.get("abc"); // undefined
286```
287
288
289### has<sup>9+</sup>
290
291has(name: string): boolean
292
293判断一个指定的键名对应的值是否存在。
294
295**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
296
297**系统能力:** SystemCapability.Utils.Lang
298
299**参数:**
300
301| 参数名 | 类型 | 必填 | 说明 |
302| -------- | -------- | -------- | -------- |
303| name | string | 是 | 要查找的参数的键名。 |
304
305**返回值:**
306
307| 类型 | 说明 |
308| -------- | -------- |
309| boolean | 是否存在相对应的key值,存在返回true,否则返回false。 |
310
311**错误码:**
312
313以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
314
315| 错误码ID | 错误信息 |
316| -------- | -------- |
317| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
318
319**示例:**
320
321```ts
322let urlObject = url.URL.parseURL('https://developer.exampleUrl/?fod=1&bard=2');
323let paramsObject = new url.URLParams(urlObject.search.slice(1));
324let result = paramsObject.has('bard');
325```
326
327
328### set<sup>9+</sup>
329
330set(name: string, value: string): void
331
332将与name关联的URLSearchParams对象中的值设置为value。
333
334如果存在名称为name的键值对,请将第一个键值对的值设置为value并删除所有其他值。如果不是,则将键值对附加到查询字符串。
335
336**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
337
338**系统能力:** SystemCapability.Utils.Lang
339
340**参数:**
341
342| 参数名 | 类型 | 必填 | 说明 |
343| -------- | -------- | -------- | -------- |
344| name | string | 是 | 将要设置的参数的键值名。 |
345| value | string | 是 | 所要设置的参数值。 |
346
347**错误码:**
348
349以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
350
351| 错误码ID | 错误信息 |
352| -------- | -------- |
353| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
354
355**示例:**
356
357```ts
358let urlObject = url.URL.parseURL('https://developer.exampleUrl/?fod=1&bard=2');
359let paramsObject = new url.URLParams(urlObject.search.slice(1));
360paramsObject.set('baz', '3'); // Add a third parameter.
361```
362
363
364### sort<sup>9+</sup>
365
366sort(): void
367
368对包含在此对象中的所有键值对进行排序。排序顺序是根据键的Unicode代码点。该方法使用稳定的排序算法(保留具有相等键的键值对之间的相对顺序)。
369
370**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
371
372**系统能力:** SystemCapability.Utils.Lang
373
374**示例:**
375
376```ts
377let paramsObject = new url.URLParams("c=3&a=9&b=4&d=2"); // Create a test URLParams object
378paramsObject.sort(); // Sort the key/value pairs
379console.info(paramsObject.toString()); // Display the sorted query string // Output a=9&b=4&c=3&d=2
380```
381
382
383### keys<sup>9+</sup>
384
385keys(): IterableIterator&lt;string&gt;
386
387返回一个包含所有键值对的name的ES6迭代器。
388
389**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
390
391**系统能力:** SystemCapability.Utils.Lang
392
393**返回值:**
394
395| 类型 | 说明 |
396| -------- | -------- |
397| IterableIterator&lt;string&gt; | 返回一个包含所有键值对的name的ES6迭代器。 |
398
399**示例:**
400
401```ts
402let paramsObject = new url.URLParams("key1=value1&key2=value2");
403let keys = paramsObject.keys();
404for (let key of keys) {
405  console.info(key);
406}
407// key1
408// key2
409```
410
411
412### values<sup>9+</sup>
413
414values(): IterableIterator&lt;string&gt;
415
416返回一个包含所有键值对的value的ES6迭代器。
417
418**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
419
420**系统能力:** SystemCapability.Utils.Lang
421
422**返回值:**
423
424| 类型 | 说明 |
425| -------- | -------- |
426| IterableIterator&lt;string&gt; | 返回一个包含所有键值对的value的ES6迭代器。 |
427
428**示例:**
429
430```ts
431let paramsObject = new url.URLParams("key1=value1&key2=value2");
432let values = paramsObject.values();
433for (let value of values) {
434  console.info(value);
435}
436// value1
437// value2
438```
439
440
441### [Symbol.iterator]<sup>9+</sup>
442
443[Symbol.iterator]\(): IterableIterator&lt;[string, string]&gt;
444
445返回一个ES6的迭代器,迭代器的每一项都是一个Array。Array的第一项是name,Array的第二项是value。
446
447**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
448
449**系统能力:** SystemCapability.Utils.Lang
450
451**返回值:**
452
453| 类型 | 说明 |
454| -------- | -------- |
455| IterableIterator&lt;[string, string]&gt; | 返回一个ES6的迭代器。 |
456
457**示例:**
458
459```ts
460const paramsObject = new url.URLParams('fod=bay&edg=bap');
461let iter = paramsObject[Symbol.iterator]();
462for (let pair of iter) {
463  console.info(pair[0] + ', ' + pair[1]);
464}
465// fod, bay
466// edg, bap
467```
468
469
470### toString<sup>9+</sup>
471
472toString(): string
473
474返回序列化为字符串的搜索参数,必要时对字符进行百分比编码。
475
476**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
477
478**系统能力:** SystemCapability.Utils.Lang
479
480**返回值:**
481
482| 类型 | 说明 |
483| -------- | -------- |
484| string | 返回序列化为字符串的搜索参数,必要时对字符进行百分比编码。 |
485
486**示例:**
487
488```ts
489let urlObject = url.URL.parseURL('https://developer.exampleUrl/?fod=1&bard=2');
490let params = new url.URLParams(urlObject.search.slice(1));
491params.append('fod', '3');
492console.info(params.toString()); // Output 'fod=1&bard=2&fod=3'
493```
494
495## URL
496
497用于解析、构造、规范、编码对应的URL字符串。
498
499### 属性
500
501**系统能力:** SystemCapability.Utils.Lang
502
503| 名称 | 类型 | 只读 | 可选 | 说明 |
504| -------- | -------- | -------- | -------- | -------- |
505| hash | string | 否 | 否 | 获取和设置URL的片段部分。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
506| host | string | 否 | 否 | 获取和设置URL的主机部分。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
507| hostname | string | 否 | 否 | 获取和设置URL的主机名部分,不带端口。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
508| href | string | 否 | 否 | 获取和设置序列化的URL。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
509| origin | string | 是 | 否 | 获取URL源的只读序列化。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
510| password | string | 否 | 否 | 获取和设置URL的密码部分。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
511| pathname | string | 否 | 否 | 获取和设置URL的路径部分。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
512| port | string | 否 | 否 | 获取和设置URL的端口部分。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
513| protocol | string | 否 | 否 | 获取和设置URL的协议部分。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
514| search | string | 否 | 否 | 获取和设置URL的序列化查询部分。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
515| searchParams<sup>(deprecated)</sup> | [URLSearchParams](#urlsearchparamsdeprecated) | 是 | 否 | 获取URLSearchParams表示URL查询参数的对象。<br/>- **说明:** 此属性从API version 7开始支持,从API version 9开始被废弃。建议使用params<sup>9+</sup>替代。 |
516| params<sup>9+</sup> | [URLParams](#urlparams9) | 是 | 否 | 获取URLParams表示URL查询参数的对象。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
517| username | string | 否 | 否 | 获取和设置URL的用户名部分。**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
518
519> **说明:**
520>
521> 在解析URL字符串时,如果入参中的port内容是当前protocol的默认端口,那么port将被解析为空字符串。默认端口为:
522>
523> | 协议 | 默认端口 |
524> | -------- | -------- |
525> | http: | 80 |
526> | https: | 443 |
527> | ftp: | 21 |
528> | gopher: | 70 |
529> | ws: | 80 |
530> | wss: | 443 |
531
532**示例:**
533
534```ts
535let that = url.URL.parseURL('http://username:password@host:8080/directory/file?foo=1&bar=2#fragment');
536console.info("hash " + that.hash); // hash #fragment
537console.info("host " + that.host); // host host:8080
538console.info("hostname " + that.hostname); // hostname host
539console.info("href " + that.href); // href http://username:password@host:8080/directory/file?foo=1&bar=2#fragment
540console.info("origin " + that.origin); // origin http://host:8080
541console.info("password " + that.password); // password password
542console.info("pathname " + that.pathname); // pathname /directory/file
543console.info("port " + that.port); // port 8080
544console.info("protocol " + that.protocol); // protocol http:
545console.info("search " + that.search); // search ?foo=1&bar=2
546console.info("username " + that.username); // username username
547// that.params 返回值为URLParams对象
548console.info("params: foo " + that.params.get("foo")); // params: foo 1
549
550let urlObj = url.URL.parseURL('http://testhost:80/directory/file?foo=1');
551console.info("port " + urlObj.port); // port
552console.info("toString " + urlObj.port); // toString http://testhost/directory/file?foo=1
553```
554
555### constructor<sup>(deprecated)</sup>
556
557> **说明:**
558>
559> 从API version 7开始支持,从API version 9开始废弃,建议使用[parseURL<sup>9+</sup>](#parseurl9)替代。
560
561constructor(url: string, base?: string | URL)
562
563URL的构造函数。
564
565**系统能力:** SystemCapability.Utils.Lang
566
567**参数:**
568
569| 参数名 | 类型 | 必填 | 说明 |
570| -------- | -------- | -------- | -------- |
571| url | string | 是 | 一个表示绝对URL或相对URL的字符串。 <br/>如果 url 是相对URL,则需要指定 base,用于解析最终的URL。 <br/>如果 url 是绝对URL,则给定的 base 将不会生效。 |
572| base | string \| URL | 否 | 入参字符串或者对象,默认值是undefined。<br/>- string:字符串。<br/>- URL:URL对象。|
573
574**示例:**
575
576```ts
577let mm = 'https://username:password@host:8080';
578let a = new url.URL("/", mm); // Output 'https://username:password@host:8080/';
579let b = new url.URL(mm); // Output 'https://username:password@host:8080/';
580new url.URL('path/path1', b); // Output 'https://username:password@host:8080/path/path1';
581let c = new url.URL('/path/path1', b);  // Output 'https://username:password@host:8080/path/path1';
582new url.URL('/path/path1', c); // Output 'https://username:password@host:8080/path/path1';
583new url.URL('/path/path1', a); // Output 'https://username:password@host:8080/path/path1';
584new url.URL('/path/path1', "https://www.exampleUrl/fr-FR/toot"); // Output https://www.exampleUrl/path/path1
585new url.URL('/path/path1', ''); // Raises a TypeError exception as '' is not a valid URL
586new url.URL('/path/path1'); // Raises a TypeError exception as '/path/path1' is not a valid URL
587new url.URL('https://www.example.com', ); // Output https://www.example.com/
588new url.URL('https://www.example.com', b); // Output https://www.example.com/
589```
590
591### constructor<sup>9+</sup>
592
593constructor()
594
595URL的无参构造函数。parseURL调用后返回一个URL对象,不单独使用。
596
597**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
598
599**系统能力:** SystemCapability.Utils.Lang
600
601### parseURL<sup>9+</sup>
602
603static parseURL(url: string, base?: string | URL): URL
604
605URL静态成员函数。
606
607**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
608
609**系统能力:** SystemCapability.Utils.Lang
610
611**参数:**
612
613| 参数名 | 类型 | 必填 | 说明 |
614| -------- | -------- | -------- | -------- |
615| url | string | 是 | 一个表示绝对URL或相对URL的字符串。 <br/>如果 url 是相对URL,则需要指定 base,用于解析最终的URL。 <br/>如果 url 是绝对URL,则给定的 base 将不会生效。 |
616| base | string \| URL | 否 | 入参字符串或者对象,默认值是undefined。<br/>- string:字符串。当第一个参数是相对URL时,该参数需符合URL标准。<br/>- URL:URL对象。<br/>- 在url是相对URL时使用。 |
617
618**返回值:**
619
620| 类型 | 说明                                              |
621| ---- | ------------------------------------------------- |
622| [URL](#url)  | 返回创建的URL对象。 |
623
624> **说明:**
625>
626> 当入参url是相对URL时,调用该接口解析后的URL并不是简单地将入参url和base直接拼接。url内容为相对路径格式时,会相对于base的当前目录进行解析,包括base中path字段最后一个斜杠前的所有路径片段,但不包括其后的部分(参照示例中url1)。url内容为指向根目录的格式时,会相对于 base 的原始地址(origin)进行解析(参照示例中url2)。
627
628**错误码:**
629
630以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
631
632| 错误码ID | 错误信息 |
633| -------- | -------- |
634| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
635| 10200002 | Invalid url string. |
636
637**示例:**
638
639```ts
640let mm = 'https://username:password@host:8080/test/test1/test3';
641let urlObject = url.URL.parseURL(mm);
642let result = urlObject.toString(); // Output 'https://username:password@host:8080/test/test1/test3'
643// url内容为相对路径格式时,此时base参数的path为test/test1,解析后的URL的path为/test/path2/path3
644let url1 = url.URL.parseURL('path2/path3', 'https://www.example.com/test/test1'); // Output 'https://www.example.com/test/path2/path3'
645// url内容为指向根目录的格式时,此时base参数的path为/test/test1/test3,解析后的URL的path为/path1/path2
646let url2 = url.URL.parseURL('/path1/path2', urlObject); // Output 'https://username:password@host:8080/path1/path2'
647url.URL.parseURL('/path/path1', "https://www.exampleUrl/fr-FR/toot"); // Output 'https://www.exampleUrl/path/path1'
648url.URL.parseURL('/path/path1', ''); // Raises a TypeError exception as '' is not a valid URL
649url.URL.parseURL('/path/path1'); // Raises a TypeError exception as '/path/path1' is not a valid URL
650url.URL.parseURL('https://www.example.com', ); // Output 'https://www.example.com/'
651url.URL.parseURL('https://www.example.com', urlObject); // Output 'https://www.example.com/'
652```
653
654### toString
655
656toString(): string
657
658将解析过后的URL转化为字符串。
659
660**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
661
662**系统能力:** SystemCapability.Utils.Lang
663
664**返回值:**
665
666| 类型 | 说明 |
667| -------- | -------- |
668| string | 转化后的字符串。 |
669
670**示例:**
671
672```ts
673const urlObject = url.URL.parseURL('https://username:password@host:8080/directory/file?query=pppppp#qwer=da');
674let result = urlObject.toString(); // Output 'https://username:password@host:8080/directory/file?query=pppppp#qwer=da'
675```
676
677### toJSON
678
679toJSON(): string
680
681将解析过后的URL转化为JSON字符串。
682
683**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
684
685**系统能力:** SystemCapability.Utils.Lang
686
687**返回值:**
688
689| 类型 | 说明 |
690| -------- | -------- |
691| string | 转化后的JSON字符串。 |
692
693**示例:**
694```ts
695const urlObject = url.URL.parseURL('https://username:password@host:8080/directory/file?query=pppppp#qwer=da');
696let result = urlObject.toJSON();
697```
698
699## URLSearchParams<sup>(deprecated)</sup>
700
701URLSearchParams接口定义了一些处理URL查询字符串的实用方法,从API version 9开始废弃,建议使用[URLParams](#urlparams9)。
702
703### constructor<sup>(deprecated)</sup>
704
705constructor(init?: string[][] | Record&lt;string, string&gt; | string | URLSearchParams)
706
707URLSearchParams的构造函数。
708
709> **说明:**
710>
711> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.constructor<sup>9+</sup>](#constructor9)替代。
712
713**系统能力:** SystemCapability.Utils.Lang
714
715**参数:**
716
717| 参数名 | 类型 | 必填 | 说明 |
718| -------- | -------- | -------- | -------- |
719| init | string[][] \| Record&lt;string, string&gt; \| string \| URLSearchParams | 否 | 入参对象。<br/>- string[][]:字符串二维数组。<br/>- Record&lt;string, string&gt;:对象列表。<br/>- string:字符串。<br/>- URLSearchParams:对象。<br/>- 默认值:undefined。 |
720
721**示例:**
722
723```ts
724let objectParams = new url.URLSearchParams([ ['user1', 'abc1'], ['query2', 'first2'], ['query3', 'second3'] ]);
725let objectParams1 = new url.URLSearchParams({"fod" : '1' , "bard" : '2'});
726let objectParams2 = new url.URLSearchParams('?fod=1&bard=2');
727let urlObject = new url.URL('https://developer.mozilla.org/?fod=1&bard=2');
728let params = new url.URLSearchParams(urlObject.search);
729```
730
731### append<sup>(deprecated)</sup>
732
733append(name: string, value: string): void
734
735将新的键值对插入到查询字符串。
736
737> **说明:**
738>
739> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.append<sup>9+</sup>](#append9)替代。
740
741**系统能力:** SystemCapability.Utils.Lang
742
743**参数:**
744
745| 参数名 | 类型 | 必填 | 说明 |
746| -------- | -------- | -------- | -------- |
747| name | string | 是 | 需要插入搜索参数的键名。 |
748| value | string | 是 | 需要插入搜索参数的值。 |
749
750**示例:**
751
752```ts
753let urlObject = new url.URL('https://developer.exampleUrl/?fod=1&bard=2');
754let paramsObject = new url.URLSearchParams(urlObject.search.slice(1));
755paramsObject.append('fod', '3');
756```
757
758### delete<sup>(deprecated)</sup>
759
760delete(name: string): void
761
762删除指定名称的键值对。
763
764> **说明:**
765>
766> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.delete<sup>9+</sup>](#delete9)替代。
767
768**系统能力:** SystemCapability.Utils.Lang
769
770**参数:**
771
772| 参数名 | 类型 | 必填 | 说明 |
773| -------- | -------- | -------- | -------- |
774| name | string | 是 | 需要删除的键值名称。 |
775
776**示例:**
777
778```ts
779let urlObject = new url.URL('https://developer.exampleUrl/?fod=1&bard=2');
780let paramsObject = new url.URLSearchParams(urlObject.search.slice(1));
781paramsObject.delete('fod');
782```
783
784### getAll<sup>(deprecated)</sup>
785
786getAll(name: string): string[]
787
788获取指定名称的所有键值对。
789
790> **说明:**
791>
792> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.getAll<sup>9+</sup>](#getall9)替代。
793
794**系统能力:** SystemCapability.Utils.Lang
795
796**参数:**
797
798| 参数名 | 类型 | 必填 | 说明 |
799| -------- | -------- | -------- | -------- |
800| name | string | 是 | 指定的键值名称。 |
801
802**返回值:**
803
804| 类型 | 说明 |
805| -------- | -------- |
806| string[] | 返回指定名称的所有键值对。 |
807
808**示例:**
809
810```ts
811let urlObject = new url.URL('https://developer.exampleUrl/?fod=1&bard=2');
812let params = new url.URLSearchParams(urlObject.search.slice(1));
813params.append('fod', '3'); // Add a second value for the fod parameter.
814console.info(params.getAll('fod').toString()) // Output ["1","3"].
815```
816
817### entries<sup>(deprecated)</sup>
818
819entries(): IterableIterator<[string, string]>
820
821返回一个ES6的迭代器,迭代器的每一项都是一个Array。Array的第一项是name,Array的第二项是value。
822
823> **说明:**
824>
825> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.entries<sup>9+</sup>](#entries9)替代。
826
827**系统能力:** SystemCapability.Utils.Lang
828
829**返回值:**
830
831| 类型 | 说明 |
832| -------- | -------- |
833| IterableIterator&lt;[string, string]&gt; | 返回一个ES6的迭代器。 |
834
835**示例:**
836
837```ts
838let searchParamsObject = new url.URLSearchParams("keyName1=valueName1&keyName2=valueName2");
839let iter = searchParamsObject.entries();
840for (let pair of iter) {
841  console.info(pair[0]+ ', '+ pair[1]);
842}
843// keyName1, valueName1
844// keyName2, valueName2
845```
846
847
848### forEach<sup>(deprecated)</sup>
849
850forEach(callbackFn: (value: string, key: string, searchParams: URLSearchParams) => void, thisArg?: Object): void
851
852通过回调函数来遍历URLSearchParams实例对象上的键值对。
853
854> **说明:**
855>
856> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.forEach<sup>9+</sup>](#foreach9)替代。
857
858**系统能力:** SystemCapability.Utils.Lang
859
860**参数:**
861
862| 参数名 | 类型 | 必填 | 说明 |
863| -------- | -------- | -------- | -------- |
864| callbackFn | function | 是 | 回调函数。 |
865| thisArg | Object | 否 | callbackFn被调用时用作this值,默认值是本对象。 |
866
867**表1** callbackFn的参数说明
868
869| 参数名 | 类型 | 必填 | 说明 |
870| -------- | -------- | -------- | -------- |
871| value | string | 是 | 当前遍历到的键值。 |
872| key | string | 是 | 当前遍历到的键名。 |
873| searchParams | [URLSearchParams](#urlsearchparamsdeprecated) | 是 | 当前调用forEach方法的实例对象。 |
874
875**示例:**
876
877```ts
878const myURLObject = new url.URL('https://developer.exampleUrl/?fod=1&bard=2');
879myURLObject.searchParams.forEach((value, name, searchParams) => {
880    console.info(name, value, myURLObject.searchParams === searchParams);
881});
882```
883
884
885### get<sup>(deprecated)</sup>
886
887get(name: string): string | null
888
889获取指定名称对应的第一个值。
890
891> **说明:**
892>
893> 若查找一个不存在的键值对名称时返回值为undefined,从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.get<sup>9+</sup>](#get9)替代。
894
895
896**系统能力:** SystemCapability.Utils.Lang
897
898**参数:**
899
900| 参数名 | 类型 | 必填 | 说明 |
901| -------- | -------- | -------- | -------- |
902| name | string | 是 | 指定键值对的名称。 |
903
904**返回值:**
905
906| 类型 | 说明 |
907| -------- | -------- |
908| string \| null | 返回第一个值,如果没找到,返回 null。 |
909
910**示例:**
911
912```ts
913let paramsObject = new url.URLSearchParams('name=Jonathan&age=18');
914let name = paramsObject.get("name"); // is the string "Jonathan"
915let age = paramsObject.get("age"); // is the string '18'
916let getObj = paramsObject.get("abc"); // undefined
917```
918
919
920### has<sup>(deprecated)</sup>
921
922has(name: string): boolean
923
924判断一个指定的键名对应的值是否存在。
925
926> **说明:**
927>
928> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.has<sup>9+</sup>](#has9)替代。
929
930**系统能力:** SystemCapability.Utils.Lang
931
932**参数:**
933
934| 参数名 | 类型 | 必填 | 说明 |
935| -------- | -------- | -------- | -------- |
936| name | string | 是 | 要查找的参数的键名。 |
937
938**返回值:**
939
940| 类型 | 说明 |
941| -------- | -------- |
942| boolean | 是否存在相对应的key值。存在返回true,否则返回false。 |
943
944**示例:**
945
946```ts
947let urlObject = new url.URL('https://developer.exampleUrl/?fod=1&bard=2');
948let paramsObject = new url.URLSearchParams(urlObject.search.slice(1));
949paramsObject.has('bard') === true;
950```
951
952
953### set<sup>(deprecated)</sup>
954
955set(name: string, value: string): void
956
957将与name关联的URLSearchParams对象中的值设置为value。如果存在名称为name的键值对,请将第一个键值对的值设置为value并删除所有其他值。如果不是,则将键值对附加到查询字符串。
958
959> **说明:**
960>
961> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.set<sup>9+</sup>](#set9)替代。
962
963**系统能力:** SystemCapability.Utils.Lang
964
965**参数:**
966
967| 参数名 | 类型 | 必填 | 说明 |
968| -------- | -------- | -------- | -------- |
969| name | string | 是 | 将要设置的参数的键值名。 |
970| value | string | 是 | 所要设置的参数值。 |
971
972**示例:**
973
974```ts
975let urlObject = new url.URL('https://developer.exampleUrl/?fod=1&bard=2');
976let paramsObject = new url.URLSearchParams(urlObject.search.slice(1));
977paramsObject.set('baz', '3'); // Add a third parameter.
978```
979
980
981### sort<sup>(deprecated)</sup>
982
983sort(): void
984
985对包含在此对象中的所有键值对进行排序,并返回undefined。排序顺序是根据键的Unicode代码点。该方法使用稳定的排序算法 (即,将保留具有相等键的键值对之间的相对顺序)。
986
987> **说明:**
988>
989> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.sort<sup>9+</sup>](#sort9)替代。
990
991**系统能力:** SystemCapability.Utils.Lang
992
993**示例:**
994
995```ts
996let searchParamsObject = new url.URLSearchParams("c=3&a=9&b=4&d=2"); // Create a test URLSearchParams object
997searchParamsObject.sort(); // Sort the key/value pairs
998console.info(searchParamsObject.toString()); // Display the sorted query string // Output a=9&b=4&c=3&d=2
999```
1000
1001
1002### keys<sup>(deprecated)</sup>
1003
1004keys(): IterableIterator&lt;string&gt;
1005
1006返回一个所有键值对的name的ES6迭代器。
1007
1008> **说明:**
1009>
1010> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.keys<sup>9+</sup>](#keys9)替代。
1011
1012**系统能力:** SystemCapability.Utils.Lang
1013
1014**返回值:**
1015
1016| 类型 | 说明 |
1017| -------- | -------- |
1018| IterableIterator&lt;string&gt; | 返回一个所有键值对的name的ES6迭代器。 |
1019
1020**示例:**
1021
1022```ts
1023let searchParamsObject = new url.URLSearchParams("key1=value1&key2=value2");
1024let keys = searchParamsObject.keys();
1025for (let key of keys) {
1026  console.info(key);
1027}
1028// key1
1029// key2
1030```
1031
1032
1033### values<sup>(deprecated)</sup>
1034
1035values(): IterableIterator&lt;string&gt;
1036
1037返回一个所有键值对的value的ES6迭代器。
1038
1039> **说明:**
1040>
1041> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.values<sup>9+</sup>](#values9)替代。
1042
1043**系统能力:** SystemCapability.Utils.Lang
1044
1045**返回值:**
1046
1047| 类型 | 说明 |
1048| -------- | -------- |
1049| IterableIterator&lt;string&gt; | 返回一个所有键值对的value的ES6迭代器。 |
1050
1051**示例:**
1052
1053```ts
1054let searchParams = new url.URLSearchParams("key1=value1&key2=value2");
1055let values = searchParams.values();
1056for (let value of values) {
1057  console.info(value);
1058}
1059// value1
1060// value2
1061```
1062
1063
1064### [Symbol.iterator]<sup>(deprecated)</sup>
1065
1066[Symbol.iterator]\(): IterableIterator&lt;[string, string]&gt;
1067
1068返回一个ES6的迭代器,迭代器的每一项都是一个Array。Array的第一项是name,Array的第二项是value。
1069
1070> **说明:**
1071>
1072> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.[Symbol.iterator]<sup>9+</sup>](#symboliterator9)替代。
1073
1074**系统能力:** SystemCapability.Utils.Lang
1075
1076**返回值:**
1077
1078| 类型 | 说明 |
1079| -------- | -------- |
1080| IterableIterator&lt;[string, string]&gt; | 返回一个ES6的迭代器。 |
1081
1082**示例:**
1083
1084```ts
1085const paramsObject = new url.URLSearchParams('fod=bay&edg=bap');
1086let pairs = paramsObject[Symbol.iterator]();
1087for (let pair of pairs) {
1088  console.info(pair[0] + ', ' + pair[1]);
1089}
1090// fod, bay
1091// edg, bap
1092```
1093
1094### toString<sup>(deprecated)</sup>
1095
1096toString(): string
1097
1098返回序列化为字符串的搜索参数,必要时对字符进行百分比编码。
1099
1100> **说明:**
1101>
1102> 从API version 7开始支持,从API version 9开始废弃,建议使用[URLParams.toString<sup>9+</sup>](#tostring9)替代。
1103
1104**系统能力:** SystemCapability.Utils.Lang
1105
1106**返回值:**
1107
1108| 类型 | 说明 |
1109| -------- | -------- |
1110| string | 返回序列化为字符串的搜索参数,必要时对字符进行百分比编码。 |
1111
1112**示例:**
1113
1114```ts
1115let urlObject = new url.URL('https://developer.exampleUrl/?fod=1&bard=2');
1116let params = new url.URLSearchParams(urlObject.search.slice(1));
1117params.append('fod', '3');
1118console.info(params.toString()); // Output 'fod=1&bard=2&fod=3'
1119```
1120<!--no_check-->