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

在Swift中使用JavaScriptCore时出现jQuery未定义的ReferenceError问题

解决JavaScriptCore中找不到jQuery的问题

别着急,这个报错ReferenceError: Can't find variable: jQuery的原因很明确:JavaScriptCore的运行环境是完全独立的,不像浏览器会自动加载你引入的外部脚本,你的业务JS代码里用到了jQuery,但当前JSContext里根本没有加载过jQuery的定义,所以才会找不到变量。

下面是具体的解决步骤:

1. 准备jQuery库文件

先把jQuery的源码文件(比如jquery.min.js)添加到你的Swift项目中,确保它被包含在项目的bundle里(在Xcode的File Inspector里勾选你的target)。

2. 在Swift中先加载jQuery,再加载你的业务JS

JavaScriptCore的执行顺序很重要,必须先让jQuery的代码在JSContext中运行,把jQuery和$变量注入到环境里,之后再加载你的业务JS文件。示例代码如下:

import JavaScriptCore

// 初始化JSContext
let jsContext = JSContext()

// 加载并执行jQuery源码
guard let jqueryFilePath = Bundle.main.path(forResource: "jquery.min", ofType: "js"),
      let jquerySource = try? String(contentsOfFile: jqueryFilePath) else {
    print("无法加载jQuery文件")
    return
}
jsContext?.evaluateScript(jquerySource)

// 加载并执行你的业务JS文件
guard let yourScriptPath = Bundle.main.path(forResource: "你的业务脚本文件名", ofType: "js"),
      let yourScriptSource = try? String(contentsOfFile: yourScriptPath) else {
    print("无法加载业务JS文件")
    return
}
jsContext?.evaluateScript(yourScriptSource)

// 调用你的setOldCities函数(示例)
if let setOldCitiesFunc = jsContext?.objectForKeyedSubscript("setOldCities") {
    setOldCitiesFunc.call(withArguments: ["Beijing, Shanghai, Guangzhou"])
}

额外注意事项

  • 确认你的业务JS里的$或jQuery调用是在jQuery加载之后执行的,顺序错了还是会报错。
  • 你提供的JS代码里webkit.mes...看起来是未完成的代码,如果是要和Swift通信,记得补全为webkit.messageHandlers相关的调用,这部分需要和Swift端的消息处理逻辑对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:15:41