1# js_api_module子系统/组件 2 3- [简介](#简介) 4- [目录](#目录) 5- [说明](#说明) 6 - [接口说明](#接口说明) 7 - [使用说明](#使用说明) 8 9- [相关仓](#相关仓) 10 11## 简介 12 13URL接口用于解析,构造,规范化和编码 URLs。 URL的构造函数创建新的URL对象。 以便对URL的已解析组成部分或对URL进行更改。URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。 14 15URI表示统一资源标识符引用。 16 17xml表示指可扩展标记语言。 18 19XmlSerializer接口用于生成一个xml文件。 XmlSerializer的构造函数创建新的XmlSerializer对象,调用XmlSerializer对象的方法生成一个xml文件。XmlPullParser 接口用于解析已有的xml文件,XmlPullParser的构造函数创建新的XmlPullParser对象,调用XmlPullParser对象的方法解析xml。 20 21## 目录 22 23``` 24base/compileruntime/js_api_module/ 25├── Class:URL # URL类 26│ ├── new URL(input[, base]) # 创建URL对象 27│ ├── hash # hash属性 28│ ├── host # host属性 29│ ├── hostname # hostname属性 30│ ├── href # href属性 31│ ├── origin # origin属性 32│ ├── password # password属性 33│ ├── pathname # pathname属性 34│ ├── port # port属性 35│ ├── protocol # protocol属性 36│ ├── search # search属性 37│ ├── searchParams # searchParams属性 38│ ├── username # username属性 39│ ├── toString() # toString方法 40│ └── toJSON() # toJSON方法 41├── Class: URLSearchParams # URLSearchParams类 42│ ├── new URLSearchParams() # 创建URLSearchParams对象 43│ ├── new URLSearchParams(string) # 创建URLSearchParams对象 44│ ├── new URLSearchParams(obj) # 创建URLSearchParams对象 45│ ├── new URLSearchParams(iterable) # 创建URLSearchParams对象 46│ ├── append(name, value) # append方法 47│ ├── delete(name) # delete方法 48│ ├── entries() # entries方法 49│ ├── forEach(fn[, thisArg]) # forEach方法 50│ ├── get(name) # get方法 51│ ├── getAll(name) # getAll方法 52│ ├── has(name) # has方法 53│ ├── keys() # keys方法 54│ ├── set(name, value) # set方法 55│ ├── sort() # sort方法 56│ ├── toString() # toString方法 57│ ├── values() # values方法 58│ └── urlSearchParams[Symbol.iterator]() # 创建URLSearchParams对象 59├── Class:URI # URI类 60│ ├── URI(str: string) # 创建URI对象 61│ ├── scheme # scheme属性 62│ ├── authority # authority属性 63│ ├── ssp # ssp属性 64│ ├── userinfo # userinfo属性 65│ ├── host # host属性 66│ ├── port # port属性 67│ ├── query # query属性 68│ ├── fragment # fragment属性 69│ ├── path # path属性 70│ ├── equals(ob: Object) # equals方法 71│ ├── normalize() # normalize方法 72│ ├── checkIsAbsolute() # checkIsAbsolute方法 73│ ├── normalize() # normalize方法 74│ └── toString() # toString方法 75├── Class:ConvertXml # ConvertXml类 76│ ├── ConvertXml() # 创建ConvertXml类对象 77│ └── convert(xml: string, options: Object) # convert方法 78├── Class:XmlSerializer # XmlSerializer类 79│ ├── new XmlSerializer(buffer: ArrayBuffer | DataView, encoding?: string) # 创建XmlSerializer类对象 80│ ├── setAttributes(name: string, value: string) # 设置Attributes方法 81│ ├── addEmptyElement(name: string) # 添加一个空元素方法 82│ ├── setDeclaration() # 设置Declaration方法 83│ ├── startElement(name: string) # 设置开始元素方法 84│ ├── endElement() # 设置结束元素方法 85│ ├── setNamespace(prefix: string, namespace: string) # 设置命名空间方法 86│ ├── setCommnet(text: string) # 设置Commnet方法 87│ ├── setCData(text: string) # 设置CData方法 88│ ├── setText(text: string) # 设置Text方法 89│ └── setDocType(text: string) # 设置DocType方法 90└── Class: XmlPullParser # XmlPullParser类 91 ├── new (buffer: ArrayBuffer | DataView, encoding?: string) # 创建XmlPullParser对象 92 └── parse(option: ParseOptions) # parse方法 93``` 94 95## 说明 96 97### 接口说明 98 99 100| 接口名 | 说明 | 101| -------- | -------- | 102| URL(url: string,base?:string \| URL) | 创建并返回一个URL对象,该URL对象引用使用绝对URL字符串,相对URL字符串和基本URL字符串指定的URL。 | 103| tostring():string | 该字符串化方法返回一个包含完整 URL 的 USVString。它的作用等同于只读的 URL.href。 | 104| toJSON():string | 该方法返回一个USVString,其中包含一个序列化的URL版本。 | 105| new URLSearchParams() | URLSearchParams() 构造器无入参,该方法创建并返回一个新的URLSearchParams 对象。 开头的'?' 字符会被忽略。 | 106| new URLSearchParams(string) | URLSearchParams(string) 构造器的入参为string数据类型,该方法创建并返回一个新的URLSearchParams 对象。 开头的'?' 字符会被忽略。 | 107| new URLSearchParams(obj) | URLSearchParams(obj) 构造器的入参为obj数据类型,该方法创建并返回一个新的URLSearchParams 对象。 开头的'?' 字符会被忽略。 | 108| new URLSearchParams(iterable) | URLSearchParams(iterable) 构造器的入参为iterable数据类型,该方法创建并返回一个新的URLSearchParams 对象。 开头的'?' 字符会被忽略。 | 109| has(name: string): boolean | 检索searchParams对象中是否含有name。有则返回true,否则返回false。 | 110| set(name: string, value string): void | 检索searchParams对象中是否含有key为name的键值对。没有的话则添加该键值对,有的话则修改对象中第一个key所对应的value,并删除键为name的其余键值对。 | 111| sort(): void | 根据键的Unicode代码点,对包含在此对象中的所有键/值对进行排序,并返回undefined。 | 112| toString(): string | 根据searchParams对象,返回适用在URL中的查询字符串。 | 113| keys(): iterableIterator\<string> | 返回一个iterator,遍历器允许遍历对象中包含的所有key值。 | 114| values(): iterableIterator\<string> | 返回一个iterator,遍历器允许遍历对象中包含的所有value值。 | 115| append(name: string, value: string): void | 在searchParams对象中插入name, value键值对。 | 116| delete(name: string): void | 遍历searchParams对象,查找所有的name,删除对应的键值对。 | 117| get(name: string): string | 检索searchParams对象中第一个name,返回name键对应的值。 | 118| getAll(name: string): string[] | 检索searchParams对象中所有name,返回name键对应的所有值。 | 119| entries(): iterableIterator<[string, string]> | 返回一个iterator,允许遍历searchParams对象中包含的所有键/值对。 | 120| forEach(): void | 通过回调函数来遍历URLSearchParams实例对象上的键值对。 | 121| urlSearchParams\[Symbol.iterator]() | 返回查询字符串中每个名称-值对的ES6迭代器。迭代器的每个项都是一个JavaScript数组。 | 122| URI(str: string) | 通过解析给定入参(String str)来构造URI。此构造函数严格按照RFC 2396附录A中的语法规定解析给定字符串。 | 123| scheme | 返回此 URI 的scheme部分,如果scheme未定义,则返回 null | 124| authority | 返回此 URI 的解码authority部分,如果authority未定义,则返回 null。 | 125| ssp | 返回此 URI 的解码scheme-specific部分。 | 126| userinfo | 返回此 URI 的解码userinfo部分。包含passworld和username。 | 127| host | 返回此 URI 的host部分,如果host未定义,则返回 null。 | 128| port | 返回此 URI 的port部分,如果port未定义,则返回 -1。URI 的port组件(如果已定义)是一个非负整数。 | 129| query | 返回此 URI 的query部分,如果query未定义,则返回 null。 | 130| fragment | 返回此 URI 的解码fragment组件,如果fragment未定义,则返回 null。| 131| path | 返回此 URI 的解码path组件,如果path未定义,则返回 null。 | 132| equals(ob: Object) | 测试此 URI 是否与另一个对象相等。如果给定的对象不是 URI,则此方法立即返回 false。 | 133| normalize() | 规范化这个 URI 的路径。如果这个 URI 的path不规范,将规范后构造一个新 URI对象返回。 | 134| checkIsAbsolute() | 判断这个 URI 是否是绝对的。当且仅当它具有scheme部分时,URI 是绝对的,返回值为true,否则返回值为false。 | 135| ConvertXml() | 用于构造ConvertXml类对象的构造函数。此构造函数无需传入参数。 | 136| convert(xml: string, options: Object) | 返回按选项要求转化xml字符串的JavaScrip对象。 | 137| XmlSerializer(buffer: ArrayBuffer \| DataView, encoding?: string) | 创建并返回一个XmlSerializer对象,该XmlSerializer对象传参两个第一参数是ArrayBuffer或DataView一段内存,第二个参数为文件格式(默认为UTF-8)。 | 138| setAttributes(name: string, value: string): void | 给xml文件中写入属性Attributes属性。 | 139| addEmptyElement(name: string): void | 写入一个空元素。 | 140| setDeclaration(): void | 设置Declaration使用编码写入xml声明。例如:<?xml version=“1.0”encoding=“utf-8”> | 141| startElement(name: string): void | 写入具有给定名称的elemnet开始标记。| 142| endElement(): void | 写入元素的结束标记。 | 143| setNamespace(prefix: string, namespace: string): void | 写入当前元素标记的命名空间。 | 144| setCommnet(text: string): void | 写入comment属性。 | 145| setCData(text: string): void | 写入CData属性。 | 146| setText(text: string): void | 写入Text属性。 | 147| setDocType(text: string): void | 写入DocType属性。 | 148| XmlPullParser(buffer: ArrayBuffer \| DataView, encoding?: string) | 创建并返回一个XmlPullParser对象,该XmlPullParser对象传参两个第一参数是ArrayBuffer或DataView一段内存,第二个参数为文件格式(默认为UTF-8)。 | 149| parse(option: ParseOptions): void | 该接口用于解析xml,ParseOptions参数为一个接口包含五个可选参{supportDoctype?: boolea ignoreNameSpace?: boolean tagValueCallbackFunction?: (name: string, value: string) => boolean attributeValueCallbackFunction?: (name: string, value: string) => boolean) tokenValueCallbackFunction?: (eventType: EventType, value: ParseInfo) => boolean }。其中tokenValueCallbackFunction回调函数的入参1是事件类型,入参2是包含getColumnNumber、getDepth等get属性的info接口,用户可通过info.getDepth()等方法来获取当前解析过程中的depth等信息。 | 150### 使用说明 151 152各接口使用方法如下: 153 154 1551、new URL(url: string,base?:string|URL) 156``` 157let b = new URL('https://developer.mozilla.org'); // => 'https://developer.mozilla.org/' 158 159let a = new URL( 'sca/./path/path/../scasa/text', 'http://www.example.com'); 160// => 'http://www.example.com/sca/path/scasa/text' 161``` 1622、tostring():string 163``` 164const url = new URL('http://10.0xFF.O400.235:8080/directory/file?query#fragment'); 165url.toString() // => 'http://10.0xff.o400.235:8080/directory/file?query#fragment' 166 167const url = new URL("http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html"); 168url.toString() // => 'http://[fedc:ba98:7654:3210:fedc:ba98:7654:3210]/index.html' 169 170const url = new URL("http://username:password@host:8080/directory/file?query#fragment"); 171url.toString() // => 'http://username:password@host:8080/directory/file?query#fragment' 172``` 1733、toJSON():string 174``` 175const url = new URL("https://developer.mozilla.org/en-US/docs/Web/API/URL/toString"); 176url.toJSON(); // => 'https://developer.mozilla.org/en-US/docs/Web/API/URL/toString' 177``` 1784、new URLSearchParams() 179``` 180let params = new URLSearchParams('foo=1&bar=2'); 181``` 1825、new URLSearchParams(string) 183``` 184params = new URLSearchParams('user=abc&query=xyz'); 185console.log(params.get('user')); 186// Prints 'abc' 187``` 1886、new URLSearchParams(obj) 189``` 190const params = new URLSearchParams({ 191 user: 'abc', 192 query: ['first', 'second'] 193}); 194console.log(params.getAll('query')); 195// Prints [ 'first,second' ] 196``` 1977、new URLSearchParams(iterable) 198``` 199let params; 200 201// Using an array 202params = new URLSearchParams([ 203 ['user', 'abc'], 204 ['query', 'first'], 205 ['query', 'second'], 206]); 207console.log(params.toString()); 208// Prints 'user = abc & query = first&query = second' 209``` 2108、has(name: string): boolean 211``` 212console.log(params.has('bar')); // =>true 213``` 2149、set(name: string, value string): void 215``` 216params.set('baz', 3); 217``` 21810、sort(): void 219``` 220params .sort(); 221``` 22211、toString(): string 223``` 224console.log(params .toString()); // =>bar=2&baz=3&foo=1' 225``` 22612、keys(): iterableIterator\<string> 227``` 228for(var key of params.keys()) { 229 console.log(key); 230} // =>bar baz foo 231``` 23213、values(): iterableIterator\<string> 233``` 234for(var value of params.values()) { 235 console.log(value); 236} // =>2 3 1 237``` 23814、append(name: string, value: string): void 239``` 240params.append('foo', 3); // =>bar=2&baz=3&foo=1&foo=3 241``` 24215、delete(name: string): void 243``` 244params.delete('baz'); // => bar=2&foo=1&foo=3 245``` 24616、get(name: string): string 247``` 248params.get('foo'); // => 1 249``` 25017、getAll(name: string): string[] 251``` 252params.getAll('foo'); // =>[ '1', '3' ] 253``` 25418、entries(): iterableIterator<[string, string]> 255``` 256for(var pair of searchParams.entries()) { 257 console.log(pair[0]+ ', '+ pair[1]); 258} // => bar, 2 foo, 1 foo, 3 259``` 26019、forEach(): void 261``` 262url.searchParams.forEach((value, name, searchParams) => { 263 console.log(name, value, url.searchParams === searchParams); 264}); 265// => foo 1 true 266// => bar 2 true 267``` 26820、urlSearchParams[Symbol.iterator] () 269``` 270const params = new URLSearchParams('foo=bar&xyz=baz'); 271for (const [name, value] of params) { 272 console.log(name, value); 273} 274// Prints: 275// foo bar 276// xyz bar 277``` 278 279 28021、URI(str: string) 281``` 282let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 283``` 28422、scheme 285``` 286let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 287gaogao.scheme // => "http"; 288``` 28923、authority 290``` 291let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 292gaogao.authority // => "gg:gaogao@www.baidu.com:99"; 293``` 29424、ssp 295``` 296let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 297gaogao.ssp " // => gg:gaogao@www.baidu.com:99/path/path?query"; 298``` 29925、userinfo 300``` 301let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 302gaogao.userinfo // => "gg:gaogao"; 303``` 30426、host 305``` 306let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 307gaogao.host // => "www.baidu.com"; 308``` 30927、port 310``` 311let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 312gaogao.port // => "99"; 313``` 31428、query 315``` 316let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 317gaogao.query // => "query"; 318``` 31929、fragment 320``` 321let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 322gaogao.fragment // => "fagment"; 323``` 32430、path 325``` 326let gaogao = new Uri.URI('http://gg:gaogao@www.baidu.com:99/path/path?query#fagment'); 327gaogao.path // => "/path/path"; 328``` 32931、equals(ob: Object) 330``` 331let gaogao = new Uri.URI('http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/path1?query#fagment'); 332let gaogao1 = gaogao; 333let res = gaogao.equals(gaogao1); 334console.log(res); // => true; 335``` 33632、normalize() 337``` 338let gaogao = new Uri.URI('http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/path/66./../././mm/.././path1?query#fagment'); 339let res = gaogao.normalize(); 340console.log(res.path); // => "/path/path1" 341console.log(res.toString()); // => "http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/path/path1?query#fagment" 342``` 34333、checkIsAbsolute() 344``` 345let gaogao = new Uri.URI('f/tp://username:password@www.baidu.com:88/path?query#fagment'); 346let res = gaogao.checkIsAbsolute(); 347console.log(res); //=> false; 348``` 34934、toString() 350``` 351let gaogao = new Uri.URI('http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/../../path/.././../aa/bb/cc?query#fagment'); 352let res = gaogao.toString(); 353console.log(res.toString()); // => 'http://gg:gaogao@[1:0:0:1:2:1:2:1]:99/../../path/.././../aa/bb/cc?query#fagment'; 354``` 355 356 35735、ConvertXml() 358``` 359var convertml = new convertXml.ConvertXml(); 360``` 36136、convert(xml: string, options: Object) 362``` 363var result = convertml.convert(xml, {compact: false, spaces: 4}); 364``` 36537、new XmlSerializer(buffer: ArrayBuffer | DataView, encoding?: string) 366``` 367 368var arrayBuffer = new ArrayBuffer(1024); 369var bufView = new DataView(arrayBuffer); 370var thatSer = new xml.XmlSerializer(bufView); 371``` 37238、setDeclaration():void 373``` 374var thatSer = new xml.XmlSerializer(bufView); 375thatSer.setDeclaration() // => <?xml version="1.0" encoding="utf-8"?>; 376``` 37739、setCommnet(text: string):void 378``` 379var thatSer = new xml.XmlSerializer(bufView); 380thatSer.setCommnet("Hello, World!"); // => <!--Hello, World!-->; 381``` 38240、setCData(text: string) :void 383``` 384var thatSer = new xml.XmlSerializer(bufView); 385thatSer.setDocType('root SYSTEM "http://www.test.org/test.dtd"'); // => <![CDATA[root SYSTEM \“http://www.test.org/test.dtd\”]]> 386``` 38741、setDocType(text: string):void 388``` 389var thatSer = new xml.XmlSerializer(bufView); 390thatSer.setDocType("foo"); // => <!DOCTYPE foo> 391``` 39242、setNamespace(prefix: string, namespace: string): void 39343、startElement(name: string): void 39444、setAttributes(name: string, value: string): void 39545、endElement(): void 39646、setText(text: string): void 397``` 398var thatSer = new xml.XmlSerializer(bufView); 399thatSer.setNamespace("h", "http://www.w3.org/TR/html4/"); 400thatSer.startElement("table"); 401thatSer.setAttributes("importance", "high"); 402thatSer.setText("Happy"); 403endElement(); // => <h:table importance="high" xmlns:h="http://www.w3.org/TR/html4/">Happy</h:table> 404``` 40547、addEmptyElement(name: string): void 406``` 407var thatSer = new xml.XmlSerializer(bufView); 408thatSer.addEmptyElement("b"); // => <b/> 409``` 41048、new (buffer: ArrayBuffer | DataView, encoding?: string) 411``` 412var strXml = 413 '<?xml version="1.0" encoding="utf-8"?>' + 414 '<note importance="high" logged="true">' + 415 ' <title>Happy</title>' + 416 '</note>'; 417var arrayBuffer = new ArrayBuffer(strXml.length*2); 418var bufView = new Uint8Array(arrayBuffer); 419var strLen = strXml.length; 420for (var i = 0; i < strLen; ++i) { 421 bufView[i] = strXml.charCodeAt(i);//设置arraybuffer 方式 422} 423var that = new xml.XmlPullParser(arrayBuffer); 424 425``` 42649、parse(option: ParseOptions): void 427``` 428var strXml = 429 '<?xml version="1.0" encoding="utf-8"?>' + 430 '<note importance="high" logged="true">' + 431 ' <title>Happy</title>' + 432 '</note>'; 433var arrayBuffer = new ArrayBuffer(strXml.length*2); 434var bufView = new Uint8Array(arrayBuffer); 435var strLen = strXml.length; 436for (var i = 0; i < strLen; ++i) { 437 bufView[i] = strXml.charCodeAt(i); 438} 439var that = new xml.XmlPullParser(arrayBuffer); 440var arrTag = {}; 441arrTag[0] = '132'; 442var i = 1; 443function func(key, value){ 444 arrTag[i] = 'key:'+key+' value:'+ value.getDepth(); 445 i++; 446 return true; 447} 448var options = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} 449that.parse(options); 450``` 451## 相关仓 452[js_api_module子系统](base/compileruntime/js_api_module/readme.md) 453 454### 许可证 455 456URL在[Mozilla许可证](https://www.mozilla.org/en-US/MPL/)下可用,说明文档详见[说明文档](https://gitee.com/openharmony/js_api_module/blob/master/mozilla_docs.txt)。有关完整的许可证文本,有关完整的许可证文本,请参见[许可证](https://gitee.com/openharmony/js_api_module/blob/master/LICENSE)