1# ArkWeb_ControllerAPI 2<!--Kit: ArkWeb--> 3<!--Subsystem: Web--> 4<!--Owner: @yp99ustc; @aohui; @zourongchun--> 5<!--Designer: @LongLie; @yaomingliu; @zhufenghao--> 6<!--Tester: @ghiker--> 7<!--Adviser: @HelloCrease--> 8 9## 概述 10 11Controller相关的Native API结构体。在调用接口前建议通过[ARKWEB_MEMBER_MISSING](capi-arkweb-type-h.md#宏定义)校验该函数结构体是否有对应函数指针,避免SDK与设备ROM不匹配导致crash问题。 12 13**起始版本:** 12 14 15**相关模块:** [Web](capi-web.md) 16 17**所在头文件:** [arkweb_type.h](capi-arkweb-type-h.md) 18 19## 汇总 20 21### 成员变量 22 23| 名称 | 描述 | 24| -- | -- | 25| size_t size | 结构体的大小。 | 26 27 28### 成员函数 29 30| 名称 | 描述 | 31| -- | -- | 32| [void (\*runJavaScript)(const char* webTag, const ArkWeb_JavaScriptObject* javascriptObject)](#runjavascript) | 注入JavaScript脚本。 | 33| [void (\*registerJavaScriptProxy)(const char* webTag, const ArkWeb_ProxyObject* proxyObject)](#registerjavascriptproxy) | 注入JavaScript对象到window对象中,并在window对象中调用该对象的同步方法。 | 34| [void (\*deleteJavaScriptRegister)(const char* webTag, const char* objName)](#deletejavascriptregister) | 删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。 | 35| [void (\*refresh)(const char* webTag)](#refresh) | 刷新当前网页。刷新的同时会清理页面栈,导致当前页面无法前进后退。 | 36| [void (\*registerAsyncJavaScriptProxy)(const char* webTag, const ArkWeb_ProxyObject* proxyObject)](#registerasyncjavascriptproxy) | 注入JavaScript对象到window对象中,并在window对象中调用该对象的异步方法。 | 37| [ArkWeb_WebMessagePortPtr* (\*createWebMessagePorts)(const char* webTag, size_t* size)](#createwebmessageports) | 创建Post Message端口。 | 38| [void (\*destroyWebMessagePorts)(ArkWeb_WebMessagePortPtr** ports, size_t size)](#destroywebmessageports) | 销毁端口。 | 39| [ArkWeb_ErrorCode (\*postWebMessage)(const char* webTag, const char* name, ArkWeb_WebMessagePortPtr* webMessagePorts, size_t size, const char* url)](#postwebmessage) | 将端口发送到HTML主页面. | 40| [const char* (\*getLastJavascriptProxyCallingFrameUrl)()](#getlastjavascriptproxycallingframeurl) | 获取调用JavaScriptProxy最后一帧的url。在JavaScriptProxy调用的线程上调用。通过registerJavaScriptProxy或者javaScriptProxy注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入对象frame的url。在被调用函数内部获取url才能获取到正确值,可以在函数里内部获取url后保存下来。<br>**起始版本:** 14 | 41| [void (\*registerJavaScriptProxyEx)(const char* webTag, const ArkWeb_ProxyObjectWithResult* proxyObject,const char* permission)](#registerjavascriptproxyex) | 注入JavaScript对象到window对象中,并在window对象中调用该对象的同步方法。该对象的同步方法可以带返回值。<br>**起始版本:** 18 | 42| [void (\*registerAsyncJavaScriptProxyEx)(const char* webTag, const ArkWeb_ProxyObject* proxyObject,const char* permission)](#registerasyncjavascriptproxyex) | 注入JavaScript对象到window对象中,并在window对象中调用该对象的异步方法。<br>**起始版本:** 18 | 43 44## 成员函数说明 45 46### runJavaScript() 47 48``` 49void (*runJavaScript)(const char* webTag, const ArkWeb_JavaScriptObject* javascriptObject) 50``` 51 52**描述:** 53 54注入JavaScript脚本。 55 56**参数:** 57 58| 参数项 | 描述 | 59| -- | -- | 60| const char* webTag | Web组件名称。 | 61|const ArkWeb_JavaScriptObject* javascriptObject | 注入的JavaScript对象。 | 62 63### registerJavaScriptProxy() 64 65``` 66void (*registerJavaScriptProxy)(const char* webTag, const ArkWeb_ProxyObject* proxyObject) 67``` 68 69**描述:** 70 71注入JavaScript对象到window对象中,并在window对象中调用该对象的同步方法。 72 73**参数:** 74 75| 参数项 | 描述 | 76| -- | -- | 77| const char* webTag | Web组件名称。 | 78| const ArkWeb_ProxyObject* proxyObject | 注册的对象。 | 79 80### deleteJavaScriptRegister() 81 82``` 83void (*deleteJavaScriptRegister)(const char* webTag, const char* objName) 84``` 85 86**描述:** 87 88删除通过registerJavaScriptProxy注册到window上的指定name的应用侧JavaScript对象。 89 90**参数:** 91 92| 参数项 | 描述 | 93| -- | -- | 94| const char* webTag | Web组件名称。 | 95| const char* objName | JavaScript对象名称。 | 96 97### refresh() 98 99``` 100void (*refresh)(const char* webTag) 101``` 102 103**描述:** 104 105刷新当前网页。刷新的同时会清理页面栈,导致当前页面无法前进后退。 106 107**参数:** 108 109| 参数项 | 描述 | 110| -- | -- | 111| const char* webTag | Web组件名称。 | 112 113### registerAsyncJavaScriptProxy() 114 115``` 116void (*registerAsyncJavaScriptProxy)(const char* webTag, const ArkWeb_ProxyObject* proxyObject) 117``` 118 119**描述:** 120 121注入JavaScript对象到window对象中,并在window对象中调用该对象的异步方法。 122 123**参数:** 124 125| 参数项 | 描述 | 126| -- | -- | 127| const char* webTag | Web组件名称。 | 128| const ArkWeb_ProxyObject* proxyObject | 注册的对象。 | 129 130### createWebMessagePorts() 131 132``` 133ArkWeb_WebMessagePortPtr* (*createWebMessagePorts)(const char* webTag, size_t* size) 134``` 135 136**描述:** 137 138创建Post Message端口。 139 140**参数:** 141 142| 参数项 | 描述 | 143| -- | -- | 144| const char* webTag | Web组件名称。 | 145| size_t* size | 出参,端口数量。 | 146 147**返回:** 148 149| 类型 | 说明 | 150|------------------------------|----| 151| [ArkWeb_WebMessagePortPtr](capi-web-arkweb-webmessageport8h.md) | Post Message端口结构体指针。 | 152 153### destroyWebMessagePorts() 154 155``` 156void (*destroyWebMessagePorts)(ArkWeb_WebMessagePortPtr** ports, size_t size) 157``` 158 159**描述:** 160 161销毁端口。 162 163**参数:** 164 165| 参数项 | 描述 | 166|---------------|--------------------| 167| [ArkWeb_WebMessagePortPtr](capi-web-arkweb-webmessageport8h.md)** ports | 发送Message端口结构体指针数组。 | 168| size_t size | 端口数量。 | 169 170### postWebMessage() 171 172``` 173ArkWeb_ErrorCode (*postWebMessage)(const char* webTag, const char* name, ArkWeb_WebMessagePortPtr* webMessagePorts, size_t size, const char* url) 174``` 175 176**描述:** 177 178将端口发送到HTML主页面. 179 180**参数:** 181 182| 参数项 | 描述 | 183| -- | -- | 184| const char* webTag | Web组件名称。 | 185| const char* name | 发送给HTML的消息名称。 | 186| [ArkWeb_WebMessagePortPtr](capi-web-arkweb-webmessageport8h.md)* webMessagePorts | Post Message端口结构体指针。 | 187| size_t size | 端口数量。 | 188| const char* url | 接收到消息的页面url。 | 189 190**返回:** 191 192| 类型 | 说明 | 193|----|------------------------------------------------------------------------------------------------------------------------------------------------------------| 194| 返回值错误码。 | [ARKWEB_SUCCESS](capi-arkweb-error-code-h.md#arkweb_errorcode) 执行成功。<br>[ARKWEB_INVALID_PARAM](capi-arkweb-error-code-h.md#arkweb_errorcode) 参数无效。<br>[ARKWEB_INIT_ERROR](capi-arkweb-error-code-h.md#arkweb_errorcode) 初始化失败,没有找到与webTag绑定的Web组件。 | 195 196### getLastJavascriptProxyCallingFrameUrl() 197 198``` 199const char* (*getLastJavascriptProxyCallingFrameUrl)() 200``` 201 202**描述:** 203 204获取调用JavaScriptProxy最后一帧的url。在JavaScriptProxy调用的线程上调用。通过registerJavaScriptProxy或者javaScriptProxy注入JavaScript对象到window对象中。该接口可以获取最后一次调用注入对象frame的url。在被调用函数内部获取url才能获取到正确值,可以在函数里内部获取url后保存下来。 205 206**起始版本:** 14 207 208**返回:** 209 210| 类型 | 说明 | 211| -- | -- | 212| const char* | 调用JavaScriptProxy最后一帧的url。 | 213 214### registerJavaScriptProxyEx() 215 216``` 217void (*registerJavaScriptProxyEx)(const char* webTag, const ArkWeb_ProxyObjectWithResult* proxyObject,const char* permission) 218``` 219 220**描述:** 221 222注入JavaScript对象到window对象中,并在window对象中调用该对象的同步方法。该对象的同步方法可以带返回值。 223 224**起始版本:** 18 225 226**参数:** 227 228| 参数项 | 描述 | 229| -- | -- | 230| const char* webTag | Web组件名称。 | 231| const [ArkWeb_ProxyObjectWithResult](capi-web-arkweb-proxyobjectwithresult.md)* proxyObject | 注册的对象。 | 232| const char* permission | json格式字符串,默认值为空。该字符串用来配置JSBridge的权限限制,可以配置对象和方法级别。 | 233 234### registerAsyncJavaScriptProxyEx() 235 236``` 237void (*registerAsyncJavaScriptProxyEx)(const char* webTag, const ArkWeb_ProxyObject* proxyObject, const char* permission) 238``` 239 240**描述:** 241 242注入JavaScript对象到window对象中,并在window对象中调用该对象的异步方法。 243 244**起始版本:** 18 245 246**参数:** 247 248| 参数项 | 描述 | 249| -------- | -------- | 250| const char* webTag | Web组件名称。 | 251| const ArkWeb_ProxyObject* proxyObject | 注册的对象。 | 252| const char* permission | json格式字符串,默认值为空。该字符串用来配置JSBridge的权限限制,可以配置对象和方法级别。 | 253 254