北陌
北陌
  • 发布:2023-07-22 18:58
  • 更新:2024-03-31 20:33
  • 阅读:968

【报Bug】vue3 webview evalJS不能正常使用

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10- 21H2

HBuilderX类型: 正式

HBuilderX版本号: 3.8.7

手机系统: Android

手机系统版本号: Android 13

手机厂商: 小米

手机机型: k50 ultra

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
<template>  
    <view class="content">  
        <web-view style="height: 600rpx;" :webview-styles='{height:600}'  
            src="http://www.baidu.com/"></web-view>  
    </view>  
</template>  

<script setup>  
    import {getCurrentInstance} from 'vue';  
    var wv; //计划创建的webview  
    const { ctx } = getCurrentInstance()  
    // #ifdef APP-PLUS  
    var currentWebview = ctx.$scope .$getAppWebview()  
    setTimeout(function() {  
        wv = currentWebview.children()[0]  
        wv.setStyle({  
            top: 150,  
            height: 300  
        })  
        wv.evalJS(`console.log("嵌入1111111")`);  
    }, 1000);   
    // #endif  
</script>  

操作步骤:

运行到安卓app基座

<template>  
    <view class="content">  
        <web-view style="height: 600rpx;" :webview-styles='{height:600}'  
            src="http://www.baidu.com/"></web-view>  
    </view>  
</template>  

<script setup>  
    import {getCurrentInstance} from 'vue';  
    var wv; //计划创建的webview  
    const { ctx } = getCurrentInstance()  
    // #ifdef APP-PLUS  
    var currentWebview = ctx.$scope .$getAppWebview()  
    setTimeout(function() {  
        wv = currentWebview.children()[0]  
        wv.setStyle({  
            top: 150,  
            height: 300  
        })  
        wv.evalJS(`console.log("嵌入1111111")`);  
    }, 1000);   
    // #endif  
</script>  

预期结果:

控制台输出:嵌入1111111

实际结果:

Uncaught ReferenceError: f is not defined at https://m.baidu.com/?from=844b&vit=fps:1
换其他网页也一样

bug描述:

vue3 使用webview,使用setStyle可以 ,但使用evalJS报错,Uncaught ReferenceError: f is not defined at 。。。

2023-07-22 18:58 负责人:无 分享
已邀请:
圣名科技

圣名科技

解决了吗

  • 北陌 (作者)

    没有

    2023-08-24 15:46

5***@qq.com

5***@qq.com

解决的啦 我也遇到同样的问题

8***@qq.com

8***@qq.com

复制我的代码,慢慢调试。

onReady() {  
                var currentWebview = this.$scope.$getAppWebview(); //获取当前页面的webview对象,此对象相当于html5plus里的plus.webview.currentWebview()        
                setTimeout(function() {    
                    let webview = currentWebview.children()[0];    
                    webview.evalJS(`alert(123)`);  
                }, 5000); //如果是页面初始化调用时,需要延时一下   
        },
喜欢技术的前端

喜欢技术的前端 - QQ---445849201

vue3 中 可以参考

<script setup>    
    import {onMounted,getCurrentInstance} from 'vue';    
    var wv; //计划创建的webview    
    const {ctx} = getCurrentInstance()    
    onMounted(() => {    
        setTimeout(() => {    
            var currentWebview = ctx.$scope.$getAppWebview()    
            wv = currentWebview.children()[0]    
            wv.evalJS("alert(123)")  
        }, 1000)    
    });    
</script>

要回复问题请先登录注册