在 iOS 应用程序中嵌入 JavaScript 引擎
Posted
技术标签:
【中文标题】在 iOS 应用程序中嵌入 JavaScript 引擎【英文标题】:Embed a JavaScript engine in an iOS application 【发布时间】:2011-07-16 02:57:45 【问题描述】:我想知道是否有人成功地将 javascript 引擎/解释器移植到 ios。我正在编写一个 iPhone 游戏,我想使用 Javascript 作为高级脚本语言(AI、游戏玩法等),但要做到这一点,我需要将 JS 引擎编译为静态库并将其链接到我的 iPhone OS 的 ObjectiveC 程序。我正在研究一些候选 JS 引擎,但我找不到任何成功的案例。
这是我希望用于 iOS 的 js 引擎
google 的 V8 javascript 引擎 Mozilla 的 SpiderMonkey另一种方法是使用UIWebView's
Javascript 回调接口,但这需要将整个UIWebView
加载到内存中,我听到的经验是它通常性能很慢。
感谢是否有人有类似的这样做经验或知道任何参考!
[更新] 正如 Kostis 所说,Apple 在 WWDC 2013 中引入了JavascriptCore
【问题讨论】:
出于任何原因不想使用 JavaScriptCore (webkit.org/projects/javascript/index.html)。听起来它可以构建为静态库并提供 Obj-C 绑定。 嗨 Justin,WebKit 中的 JavaScriptCore 源代码可以在 Mac OS X 上构建,但是,为 iOS 构建它似乎并不简单,但我稍后会试一试 嗨 Denny,你有没有为 iOS 准备好任何东西?? 【参考方案1】:您可能对以下两个项目感兴趣:
-
JavaScriptCore-iOS
iMonkey
绝对可以在您的 iOS 应用程序中构建和发布 JavaScript 引擎,请参阅http://www.phoboslab.org/log/2011/04/ios-and-javascript-for-real-this-time。钛也这样做:https://github.com/appcelerator/webkit_titanium/tree/master/Source/JavaScriptCore。 另见http://www.phoboslab.org/log/2011/06/javascriptcore-project-files-for-ios。
我还制作了一个小应用程序,展示如何在 iOS 上使用 JSC:https://github.com/jfahrenkrug/AddressBookSpy
享受吧。
【讨论】:
请注意,JavaScriptCore 似乎是 LGPL v2,这对于闭源 iOS 应用程序来说是有问题的,除非您提供 .o 文件,以便有人可以将您的应用程序与不同版本的 JavaScriptCore 库重新链接(询问您的律师,这不是法律建议)。 “如果您将程序与库链接,您必须向接收者提供完整的目标文件,以便他们在对库进行更改并重新编译后将它们与库重新链接。” 感谢 Johannes,我从不知道有一个按钮可以实现 :-0 。感谢大家!我很惊讶这里有很多好的答案。至于嵌入的进度,我遵循了您对 JavaScriotCore-iOS 项目的建议,是的,我能够在 iOS 上编译和运行本机 javascript 解释器。 重新获得许可,可能值得 ping 开发人员看看这是否是他们真正想要的模型。因为它是为 iOS 设计的,所以分发 .o 似乎是一个奇怪的限制。【参考方案2】:对于未来的观众来说,现在有 JavaScriptCore 框架,在新的 iOS 7 中引入。它很神奇!包装,从/到 JS/Objective-C 的值,调用函数,回调,一切!
不幸的是,目前的文档真的很差。您可以从WWDC 2013 event 中找到演示文稿,并在头文件中找到更多信息(cmd+单击 Xcode 中的头文件名)。互联网上也有一些教程只是复制了 WWDC 演示文稿中的人所做的事情。
我已经将它用于我的一个项目,它真的很强大。我唯一不喜欢的是它通过值将对象从 JS 传递到 ObjC,即引用丢失了。可能有解决方法,但如果没有适当的文档,我找不到任何东西。
希望这会对某人有所帮助:)
【讨论】:
【参考方案3】:看看嵌入了 JavaScriptCore 的开源项目Ejecta。它提供 HTML5 画布 API,并使用 OpenGL 和 OpenAL。
【讨论】:
【参考方案4】:如果您最终希望将游戏移植到 iOS 以外的其他平台(或者您有其他原因避免使用 Apple 的专有接口),您可以使用 MuJS。它是一个小型库,提供易于嵌入和扩展的 JavaScript 解释器。
【讨论】:
以上是关于在 iOS 应用程序中嵌入 JavaScript 引擎的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?
我们可以在Node JS应用程序中使用socket.io和ejs(嵌入式javascript)而不是html页面吗?
嵌入在 WKWebView 加载的 HTML 文件中的 JavaScript 是不是可以访问?
如何在 iOS 应用程序 WkWebView 中调试 javascript?