跳到主要内容

JavaScript 执行设计

1. 重要通知:当前限制

1.1 功能状态

当前 execute_javascript 功能存在较多实现问题,暂不推荐使用。由于技术限制,直接执行 JavaScript 可能导致不可预期的行为,包括性能问题、安全风险和稳定性问题。

1.2 推荐替代方案

强烈建议使用以下替代方案

  1. 预载 JavaScript (preload_js):在 WebView 初始化时注入预加载脚本,实现前后端通信
  2. IPC 通信:通过事件机制实现前后端交互

2. 设计建议:IPC 通信优先

2.1 核心建议

优先使用 IPC 通信实现前后端交互,避免直接执行 JavaScript 操作前端页面

2.2 IPC 通信 vs 直接执行 JavaScript

维度IPC 通信直接执行 JavaScript
安全性✅ 明确接口,权限可控❌ 注入风险,权限过大
性能✅ 异步高效,事件驱动❌ 开销大,可能阻塞渲染
可维护性✅ 前后端分离,易测试❌ 逻辑分散,难管理
调试✅ 支持浏览器工具,日志完整❌ 错误定位困难

2.3 适用场景

需求类型推荐方案
UI 更新IPC 事件 + 前端处理
数据传递IPC 结构化数据
函数调用IPC 事件触发
状态同步IPC 双向事件
测试调试直接执行 JS(例外)
一次性操作直接执行 JS(例外)

2.4 最佳实践

  • 优先设计 IPC 接口,明确前后端契约
  • 仅在特殊场景使用 execute_javascript,脚本保持简单
  • 避免在动态 JS 中包含复杂逻辑
  • 严格验证输入输出,记录执行日志