Johnny_new
Johnny_new
  • 发布:2024-11-08 17:01
  • 更新:2024-11-08 19:28
  • 阅读:65

在uniapp中有多个web-view时,如何标识web-view?

分类:uni-app

web-view标签是循环出来的! 我怎么知道那个web-view 对应哪条数据?
list数据如下:
[
{
"src": "undefinedpage/index/indexHome.jsp",
"frameName": "link1",
"height": 0,
"top": 0,
"linkName": "首页"
},
{
"src": "undefinedpage/index/indexNearby.jsp",
"frameName": "link2",
"height": 0,
"top": 0,
"linkName": "分类"
},
{
"src": "undefinedpage/index/indexUnit_group.jsp",
"frameName": "link3",
"height": 0,
"top": 0,
"linkName": "非密办公"
},
{
"src": "undefinedpage/index/shoppingCart.jsp",
"frameName": "link4",
"height": 0,
"top": 0,
"linkName": "购物车"
},
{
"src": "undefinedpage/my/indexMy.jsp",
"frameName": "link5",
"height": 0,
"top": 0,
"linkName": "我的"
}
]

我在@message 回调中完全就不知道那个页面给我发送的消息?

通过this.$scope.$getAppWebview().children()获取的结果也无法分清(id都一样) 如下图(这里只显示2个其他都差不多,我先删了)

2024-11-08 17:01 负责人:无 分享
已邀请:
BoredApe

BoredApe - 有问题就会有答案。

uni.webView.postMessage时可以传递参数
在这里可以传递标识或者url来做区分
例如:

  uni.webView.postMessage({  
                data: { type: 'xxx', params },  
            });
  • Johnny_new (作者)

    问题是 我需要获取到对应的webview 最后要执行evalJS方法,但是从this.$scope.$getAppWebview().children()获取时是一个数组,我不知道因该给那个执行evalJS

    2024-11-08 17:39

  • Johnny_new (作者)

    除了 this.$scope.$getAppWebview().children()能获取到webView 对象 还有别的方式能获取到webView吗?比如$refs

    2024-11-08 17:40

  • Johnny_new (作者)

    大神救命呀

    2024-11-08 17:56

爱豆豆

爱豆豆 - 办法总比困难多

给你的message穿个参数不就能区分了吗?
可以传个id 或者索引 区分当前触发的是第几个web-view

  • Johnny_new (作者)

    你这个不对呀! 获取到的永远是第一个! 我在第二个和第三个上发送消息 返回的下标永远是第一个

    2024-11-11 09:46

  • 爱豆豆

    回复 Johnny_new: 你这个自定义的tabbar是用的什么控制显示隐藏的?

    2024-11-11 10:29

  • Johnny_new (作者)

    感谢你的反馈。我目前遇到的问题与 TabBar 无关,上面的list数据是一个测试例子。我有两个 HTML 页面托管在服务器上,只能通过 WebView 打开。这两个页面都包含一个相同的函数。现在的问题是,我在 A 界面通过 uni.postMessage 发送消息给壳子,但壳子不知道应该回调给哪个 WebView。我已经尝试了你建议的 @message="(event) => test(event, index)" 方法,但在 test 函数中接收到的 index 始终为 0。请问有什么更好的解决方案吗?

    2024-11-11 10:49

  • 爱豆豆

    回复 Johnny_new: 你的两个HTML也就是两个WebView是同时显示在一个页面里的嘛?

    2024-11-11 10:59

  • 爱豆豆

    回复 Johnny_new: 也就只能传参判断了 跟楼上做法一样

    2024-11-11 11:00

  • Johnny_new (作者)

    回复 爱豆豆: 但是我传参也就只能传一个url 但是webView请求的url 被重定向了! 我这个就找不到了。

    2024-11-11 11:21

  • 爱豆豆

    回复 Johnny_new:反正你webView是固定的 在项目打开时 把传的参数存本地呢?这样就不会找不到了

    2024-11-11 11:30

  • 爱豆豆

    回复 Johnny_new: 被重定向之前存本地

    2024-11-11 11:31

BoredApe

BoredApe - 有问题就会有答案。

  • Johnny_new (作者)

    是这样! 我for循环 webView 打开html5,在html5中调用uni.postMessage并且发送了当前地址,壳子根据地址循环找到下标。但是有一个问题 当我webView请求的界面被重定向后,我这个下标就完全找不到了! 我现在其实就是想在@message时获取到当前for循环的下标获取其他的,让我知道那个界面发来的消息,我会调用对应webView的evalJS方法(2个界面都有相同的业务,我不能给所有webView 都执行evalJS)。

    2024-11-11 10:11

  • Johnny_new (作者)

    我壳子上写 这样 @message="(event) => message(event,index)" message函数中获取的index永远都是0

    2024-11-11 10:25

  • BoredApe

    回复 Johnny_new: 纯app吗?不涉及其他端,您可以在创建webview时,不使用web-view组件,直接使用plus.webview去创建页面。可以设置webview ID,参考文档:https://www.html5plus.org/doc/zh_cn/webview.html

    2024-11-11 13:39

要回复问题请先登录注册