You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现love.js中Love2D剪贴板与浏览器剪贴板同步?

Love.js 实现浏览器剪贴板同步

love.js 默认的 love.system.getClipboardText() 和 setClipboardText() 仅在游戏沙箱内独立运行,无法与浏览器系统剪贴板互通。要解决这个问题,需要通过 love.js 提供的 js 模块桥接浏览器原生剪贴板 API,直接调用浏览器的剪贴板功能。

实现步骤

1. 引入 love.js 的 JS 桥接模块

在代码开头引入 js 模块,获取浏览器的全局环境对象:

local js = require("js")
local window = js.global
local navigator = window.navigator

2. 替换剪贴板操作逻辑

修改你的 love.keypressed 函数,将原有的 love.system 剪贴板调用替换为浏览器原生 API:

function love.keypressed(key)
    if FEN_input.active then
        if (key == "v" or key == "V") and (love.keyboard.isDown("lctrl") or love.keyboard.isDown("rctrl")) then
            -- 读取浏览器剪贴板(异步操作)
            navigator.clipboard:readText():then_(function(text)
                if text then
                    FEN_input.text = FEN_input.text .. text
                end
            end):catch_(function(err)
                print("剪贴板读取失败: " .. tostring(err))
            end)
        elseif (key == "c" or key == "C") and (love.keyboard.isDown("lctrl") or love.keyboard.isDown("rctrl")) then
            -- 写入浏览器剪贴板(异步操作)
            navigator.clipboard:writeText(FEN_input.text):then_(function()
                print("内容已复制到浏览器剪贴板")
            end):catch_(function(err)
                print("剪贴板写入失败: " .. tostring(err))
            end)
        elseif (key == "a" or key == "A") and (love.keyboard.isDown("lctrl") or love.keyboard.isDown("rctrl")) then
            FEN_input.selectAll = true
        else
            FEN_input.selectAll = false
        end
    end
end

关键说明

  • 异步处理:浏览器剪贴板 API 是异步的,因此需要通过 Promise 的 then_(对应 JS 的 then)和 catch_(对应 JS 的 catch)方法处理结果和错误。Lua 中 then 是关键字,所以 love.js 将 JS 方法名转换为 then_。
  • 权限要求:浏览器会在首次调用剪贴板 API 时向用户请求权限,由于操作是通过用户主动触发的按键事件(Ctrl+C/V)发起的,权限申请通常会被通过。
  • 兼容性:现代主流浏览器(Chrome、Firefox、Edge 等)都支持 navigator.clipboard API,无需额外兼容处理。

内容的提问来源于stack exchange,提问作者Aye Veska

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:13:21