HarmonyOS 鸿蒙Next:如何从h5消息触发关闭web渲染并重新渲染登录UI
HarmonyOS 鸿蒙Next:如何从h5消息触发关闭web渲染并重新渲染登录UI
之前是用if else来渲染的,用户在app上点击登录后,修改bool变量,切换到web渲染,现在是期望从h5那边收到一个消息后,要把web的渲染关掉,重新渲染登录的ui
2 回复
可以参考以下demo:
~~~
// xxx.ets
import web_webview from '@ohos.web.webview';
class WebObj {
constructor() {
}
clickEvent(event: string): <span class="hljs-keyword">void</span> {
console.log(event);
}
}
@Entry
@Component
struct Index {
controller: web_webview.WebviewController = new web_webview.WebviewController();
@State webTestObj: WebObj = new WebObj();
build() {
Column() {
Web({ src: $rawfile(<span class="hljs-string">'index.html'</span>), controller: <span class="hljs-keyword">this</span>.controller })
.javaScriptAccess(<span class="hljs-literal">true</span>)
.onControllerAttached(() => {
<span class="hljs-keyword">this</span>.controller.registerJavaScriptProxy(<span class="hljs-keyword">this</span>.webTestObj, <span class="hljs-string">"objTestName"</span>, [<span class="hljs-string">"clickEvent"</span>]);
<span class="hljs-keyword">this</span>.controller.refresh();
});
}
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
~
~
<!-- index.html -->
<!DOCTYPE html>
<html>
<meta charset="“utf-8"”>
<body>
<button type="“button”" onclick="“htmlTest()”">Click Me!</button>
</body>
<script type="“text/javascript”">
function htmlTest() {
objTestName.clickEvent(‘点击了按钮’);
}
</script>
</html>
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
~
您可以通过传过来的数据进行判断,参考:
~
import web_webview from ‘@ohos.web.webview’;
interface IWebTestObj {
clickEvent: (event: string) => void
}
@Entry
@Component
struct Index {
controller: web_webview.WebviewController = new web_webview.WebviewController();
@State isWeb: boolean = true
@State webTestObj: IWebTestObj = { clickEvent: this.clickEvent.bind(this) };
clickEvent(event: string): void {
console.info(this.isWeb + ‘’, ‘isWeb’)
if(event == ‘点击了按钮’){
this.isWeb = false
}
}
build() {
Column() {
if(this.isWeb){
Web({ src: $rawfile(‘index.html’), controller: this.controller })
.javaScriptAccess(true)
.onControllerAttached(()=>{
this.controller.registerJavaScriptProxy(this.webTestObj, ““objTestName””, ["“clickEvent”"]);
this.controller.refresh();
})
}else {
Text(‘login’)
}
}
}
}
~
~
<!-- index.html -->
<!DOCTYPE html>
<html>
<meta charset="“utf-8"”>
<body>
<button type="“button”" onclick="“htmlTest()”">Click Me!</button>
</body>
<script type="“text/javascript”">
function htmlTest() {
objTestName.clickEvent(‘点击了按钮’);
}
</script>
</html>
~~~
更多关于HarmonyOS 鸿蒙Next:如何从h5消息触发关闭web渲染并重新渲染登录UI的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,实现从H5消息触发关闭Web渲染并重新渲染登录UI的功能,可以遵循以下步骤:
-
H5消息触发:
- 在H5页面中,通过JavaScript或其他前端技术监听特定事件或用户操作,当满足条件时,发送一个消息到鸿蒙应用侧。
-
鸿蒙应用侧接收消息:
- 在鸿蒙应用中,使用createWebMessagePorts()接口创建消息端口,并在应用侧的消息端口上注册回调事件,以接收来自H5页面的消息。
-
处理消息并关闭Web渲染:
- 当鸿蒙应用侧接收到来自H5页面的消息时,在回调事件中处理该消息。
- 根据消息内容,执行关闭当前Web渲染的逻辑,例如销毁当前的Web组件实例。
-
重新渲染登录UI:
- 在关闭Web渲染后,根据应用的需求,重新创建Web组件实例或加载新的页面,以显示登录UI。
- 确保新的Web组件实例或页面能够正确渲染登录UI,并响应用户的操作。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html