HarmonyOS 鸿蒙Next web 组件,注入 js 来获取 html 文本里的所有图片,并为图片添加点击事件
HarmonyOS 鸿蒙Next web 组件,注入 js 来获取 html 文本里的所有图片,并为图片添加点击事件
web 组件,注入 js 来获取 html 文本里的所有图片,并为图片添加点击事件
2 回复
注入js可以使用web组件的runJavaScript方法,可异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。
示例如下:
// xxx.ets
import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct WebComponent {
webviewController: webview.WebviewController = new webview.WebviewController();
aboutToAppear() {
// 配置Web开启调试模式
webview.WebviewController.setWebDebuggingAccess(true);
}
runJavaScript() {
//注入js方法
this.webviewController.runJavaScript(`
function getImages(){
var objs = document.getElementsByTagName('img');
var imgScr = '';
for(var i=0;i<objs.length;i++){
imgScr = imgScr + objs[i].src + 'A+++A';
}
return imgScr
}
function registerImageClickAction(){
var imgs = document.getElementsByTagName('img');
var length = imgs.length;
for(var i=0;i<length;i++){
img = imgs[i];
img.onclick = function(){
window.location.href = this.src
}
}
}`);
}
build() {
Column() {
Button('调用js方法').onClick(() => {
this.webviewController.runJavaScript('registerImageClickAction()');
this.webviewController.runJavaScript('getImages()', (error, result) => {
if (error) {
console.error(`run JavaScript error, ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
return;
}
if (result) {
console.info(`The getImages() return value is: ${result}`);
}
});
})
Web({ src: $rawfile('index.html'), controller: this.webviewController }).onPageEnd(() => {
//网页加载完成时执行注入js方法
this.runJavaScript()
})
}
}
}
web组件与页面交互参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-in-app-frontend-page-function-invoking-V5