如何在Ruby中调用JavaScript:Bowline Proxy API完整指南(附示例) 如何在Ruby中调用JavaScriptBowline Proxy API完整指南附示例【免费下载链接】bowlineRuby/JS GUI and Binding framework (deprecated)项目地址: https://gitcode.com/gh_mirrors/bo/bowlineBowline 是一个面向桌面端的 Ruby/HTML/JS GUI 绑定框架让你用 Web 技术写界面、用 Ruby 写逻辑。本文聚焦 Bowline Proxy API 的完整用法如何从 Ruby 侧调用 JavaScriptcall/res/赋值三大模式、如何在 Binder 中使用代理快捷方式以及 JavaScript 如何反向调用 Ruby 方法全部配可直接运行的示例新手也能快速上手 。什么是 Bowline Proxy APIBowline 把桌面应用拆成三层HTML/JavaScript 负责视图Ruby 负责业务逻辑中间的绑定层负责两端通信。Proxy API 正是这条通信通道中Ruby → JavaScript的方向Proxy代理在 Ruby 中链式书写一行 JavaScript框架负责在正确的窗口、正确的时机执行Bridge桥反向通道让 JavaScript 安全地调用 Ruby 方法Binder绑定器把数据模型与 HTML 元素自动同步的胶水层是日常使用 Proxy 最频繁的地方核心实现位于lib/bowline/desktop/proxy.rb反向调用的入口在lib/bowline/desktop/bridge.rb。快速上手Ruby 调用 JS 的 3 种模式Proxy 通过method_missing收集你点出来的每一段 JS 表达式最终拼成一条完整的脚本注入到窗口中执行。只需记住两个终结词call调函数res取值。proxy.FooObject.hi(1, 2, 3).bye.call # 执行链式函数调用 FooObject.hi(1,2,3).bye() proxy.FooObject.messages.res # 求值变量返回 JS 侧的值 proxy.FooObject.messages.res do |result| puts Messages are: #{result} # 也可用回调块异步接收结果 end proxy.FooObject.messages [1, 2, 3] # 赋值语句以 结尾会立即执行三个要点模式写法规则典型场景函数调用末尾加.call触发 JS 副作用弹窗、动画、发请求变量求值末尾加.res读取页面上某个对象的状态赋值以结尾自动执行从 Ruby 向 JS 写入配置数据 参数会先经过JSON 序列化再传入因此只能传Hash、Array、String、Integer四类对象——这也是 JS 侧收到数据时的格式。Binder 里的代理快捷方式最常用场景日常开发中你很少手动Proxy.new因为 Binder 内置了三个现成的代理入口见lib/bowline/binders.rbclass UsersBinder Bowline::Binders::Base bind User def destroy self.item.destroy self.element.remove # element 是该用户对应的 jQuery 元素 page.alert(删除成功).call # page页面 JS 代理 end end三个快捷方式各管一摊page代理整个页面可调用任意全局 JS 函数如page.alert(hello).callbowline代理框架自身的 JS 对象Bowline用于替换/更新绑定数据jquery代理jQuery例如jquery.getJSON(url).call直接发 Ajax与之配合前端只需一行 JS 即可反向触发上面的 Ruby 方法参见examples/example.js$(#users).invoke(destroy); // 调用某条记录的实例方法 $(#users).invoke(admins); // 调用集合级方法反向调用JavaScript 如何调用 RubyBridgeProxy 只管单向JS 调 Ruby 则由Bridge完成。机制很清晰JS 发送一条 JSON 消息{klass, method, args}Ruby 侧检查该类是否暴露过这个方法安全才执行。class FooClass extend Bowline::Desktop::Bridge::ClassMethods js_expose # 一键暴露给 JS def self.foo :bar end endBowline.invoke(FooClass, foo, function(res){ console.log(res); // 回调接收 Ruby 的返回值 });两个实用细节继承自Bowline::Binders::Base的类默认已调用js_expose所以你的 Binder 方法前端直接invoke即可无需任何配置未被暴露的方法会抛出Method not allowed这是框架内置的安全闸门 ⚠️原理与避坑指南 ⚠️1. 脚本是排队执行的不是立即执行call/res触发的脚本会先进入队列lib/bowline/desktop/js.rb等对应窗口加载完毕loaded?才真正注入执行。窗口没就绪时调用不会报错只会延后——这是新手最常见的为什么没反应原因。2. 分清call与rescall末尾会自动补()把表达式当函数执行res则把表达式当变量求值。拿函数当变量取res拿到的是函数引用而非执行结果。3. 多窗口注意限制一个 Binder 可能被多个窗口同时绑定此时page会把脚本广播到所有窗口但无法返回值框架会直接抛出Cant return from multiple windows此时请避免使用.res。4. 返回值同样走 JSONJS 侧结果经JSON.parse还原后交给你的回调块true/false有专门处理其余按 JSON 解析。所以 Ruby 侧拿到的true是布尔不是字符串。相关源码文件一览想深入阅读实现推荐按这个顺序lib/bowline/desktop/proxy.rb—— Proxy 的call/res/链式收集逻辑lib/bowline/desktop/bridge.rb—— JS→Ruby 的消息解析与安全校验lib/bowline/desktop/js.rb—— 脚本队列与轮询执行机制lib/bowline/binders.rb—— Binder 基类及page/bowline/jquery代理examples/example.js、examples/tweets_binder.rb—— 前后端配合的完整小例子assets/bowline.js—— 前端绑定库bowlineChain/invoke的实现如果希望直接上手先阅读根目录的README.txt里面有一个从生成项目到运行 Twitter 客户端的完整流程git clone https://gitcode.com/gh_mirrors/bo/bowline总结Bowline Proxy API 的精髓可以浓缩为一句话用 Ruby 的写法说JavaScript——链式拼表达式、call执行、res取值、赋值配合 Binder 的page/bowline/jquery三个快捷代理和 Bridge 的反向通道Ruby 与 JS 的双向通信就完成了。框架帮你处理了时机排队、JSON 序列化和安全校验你只需专注业务逻辑 ✅。【免费下载链接】bowlineRuby/JS GUI and Binding framework (deprecated)项目地址: https://gitcode.com/gh_mirrors/bo/bowline创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

基于DeepSeek Harness打造AI编程IDE:从聊天工具到开发环境的实战改造

基于DeepSeek Harness打造AI编程IDE:从聊天工具到开发环境的实战改造

最近在尝试将大模型集成到开发工作流中时,发现很多工具要么功能单一,要么配置复杂,难以形成一个流畅的“编码-对话-调试”闭环。DeepSeek Harness 作为一个新兴的AI编程工具,其潜力远不止于一个简单的聊天插件。本文将分享我如何基…

2026/8/24 20:38:31
STM32以太网硬件接口详解:从MII/RMII到PHY驱动的实战指南

STM32以太网硬件接口详解:从MII/RMII到PHY驱动的实战指南

1. 从芯片引脚到网络数据包:STM32以太网接口的硬件基石 当我们谈论在STM32这类微控制器上实现以太网功能时,很多人会立刻想到LWIP协议栈、Socket编程这些软件层面的东西。这没错,但如果你跳过硬件接口这一环,直接扎进代码里&#…

2026/8/24 20:38:31
华为OD机试加密算法实现:Python与JS双语言方案

华为OD机试加密算法实现:Python与JS双语言方案

1. 项目背景与核心挑战华为OD(Huawei Outsourcing Development)机试作为华为生态合作伙伴人才选拔的重要环节,其机考系统每年都会更新题库并升级防作弊机制。2026年C卷最显著的变化是引入了双机位监考系统:主机位用于答题&#xf…

2026/8/24 20:38:31
从Windows系统底层说清楚一个顽疾——软件窗口的闪烁问题

从Windows系统底层说清楚一个顽疾——软件窗口的闪烁问题

目录 一、Windows 窗口闪烁的本质定义 二、Windows 窗口系统的真实底层结构 1️.窗口 ≠ 屏幕像素 2️.每个窗口都有“表面类型” 三、Present Path(呈现路径)—— 闪烁的核心概念 Present Path 定义: 常见 Present Path: 四、DWM(桌面窗口管理器)的合成模型 1️…

2026/8/24 20:38:31
测开面试SQL速成:三大金刚题型与实战技巧

测开面试SQL速成:三大金刚题型与实战技巧

1. 测开面试SQL速成指南:三大金刚题型精讲刚入行测试开发那会儿,我花了整整两周准备SQL面试题,刷了上百道LeetCode才发现——真正高频出现的核心题型其实就三类。现在带团队面试新人时也验证了这点:80%的SQL考察都围绕"三大金…

2026/8/24 20:38:31
本地代理模拟支付验证:技术原理、部署与测试指南

本地代理模拟支付验证:技术原理、部署与测试指南

这次我们来看一个解决海外支付卡问题的技术方案。如果你因为缺少海外信用卡而无法使用GPT-4、Claude、Midjourney等AI服务的高级功能,这篇文章提供了一个可操作的本地部署思路。核心不是概念,而是如何通过技术手段,在合规前提下,模…

2026/8/24 20:33:30