跳到主要内容

发送消息至web(:postMessage)

函数

webView:postMessage(消息内容)

参数

  1. 消息内容: 字符串 类型。需要发送给网页前端的消息文本。

说明

向 WebView 内部的网页发送消息。 前端页面可以通过监听标准的 message 事件(window.addEventListener('message', ...))或监听自定义事件 TSMessagewindow.addEventListener('TSMessage', ...))来接收来自 Lua 脚本的数据。

提示:Lua 传递的字符串会自动进行 JSON 序列化处理,因此即使字符串中包含引号或换行符,也不会导致 JavaScript 执行错误。

示例

1. HTML 前端代码 (test.html)

在网页中,编写如下代码接收来自 Lua 的消息:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TAS WebView 接收消息测试</title>
</head>
<body>
<div id="msgBox">等待接收 Lua 的消息...</div>

<script>
// 方式 1:监听标准的 message 事件 (推荐)
window.addEventListener('message', function(event) {
document.getElementById('msgBox').innerText = "标准 message 事件收到: " + event.data;
});

// 方式 2:监听自定义的 TSMessage 事件
window.addEventListener('TSMessage', function(event) {
console.log("TSMessage 事件收到: " + event.detail);
});
</script>
</body>
</html>

2. Lua 脚本代码

在脚本中加载网页,并在适当的时机发送消息:

local view =
webView.init {
x = 0, --屏幕横坐标 int 整数 必填
y = 0, -- 屏幕纵坐标 int 整数 必填
width = 1125, -- 宽度 int 整数 必填
height = 2436, --高度 int 整数 必填
html = [[<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>TAS WebView 交互测试</title>

<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
#msgBox {
padding: 20px;
font-size: 20px;
color: #333;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<div id="msgBox">等待接收消息...</div>

<script>
// 监听标准的 message 事件
window.addEventListener('message', function(event) {
document.getElementById('msgBox').innerText = "收到 Lua 消息:\n" + event.data;
window.webkit.messageHandlers.tsBridge.postMessage("web 已经收到来自 lua 的消息"); //我们收到消息后 给lua 也发送一条消息
});
</script>
</body>
</html>]], -- html 可选 和url 字段 必须存在一项 文本
alpha = 100, -- 透明度 可选 默认 0 -100 整数 默认100
radius = 5.0, -- 圆角 可选
hit = true, --是否可拖动 可选 默认 true
userInteractionEnabled = true -- 是否可交互 为false 时 拖动失效 可选 默认 true
}

view:show()
sys.msleep(1000) --给一点页面加载的时间

view:postMessage("你好,这是一条来自 Lua 的消息!") --发送消息到 webView

view:setMessageCallback( --接收来自webView 消息
function(message) --接收来自webView 的消息
print("收到网页消息: " .. message)
end
)

sys.msleep(10000) --延迟10秒 在停止脚本