3

我想在 Ruby 应用程序中运行 jQuery 并使用它来操作 HTML 字符串。(是的,我知道还有其他 Ruby 库可以处理该任务,但在这种情况下我有充分的理由使用 jQuery。)这可能吗?我知道我可以使用 ExecJS 在我的 Ruby 应用程序中执行简单的 JavaScript 代码,但 jQuery 似乎不起作用:

irb(main):001:0> require 'execjs'
=> true
irb(main):002:0> require 'open-uri'
=> true
irb(main):003:0> context = ExecJS.compile(open("http://code.jquery.com/jquery-1.9.1.js").read)
=> <Return omitted for brevity>
irb(main):004:0> context.call("$", "<div>Test</div>")
ExecJS::ProgramError: ReferenceError: window is not defined
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/external_runtime.rb:68:in `extract_result'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/external_runtime.rb:28:in `block in exec'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/execjs-.4.0/lib/execjs/external_runtime.rb:41:in `compile_to_tempfile'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/execjs-.4.0/lib/execjs/external_runtime.rb:27:in `exec'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/execjs-.4.0/lib/execjs/external_runtime.rb:19:in `eval'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/execjs-.4.0/lib/execjs/external_runtime.rb:33:in `call'
        from (irb):4
        from c:/RailsInstaller/Ruby1.9.3/bin/irb:12:in `<main>'

我怎样才能让它工作?

4

2 回答 2

4

错误消息告诉您问题所在:

ExecJS::ProgramError: ReferenceError: window is not defined

jQuery 是一个用于 DOM 操作的库。它期望看到所有常见的 DOM 对象和接口,包括window对象。

您使用的 ExecJS 库不提供 DOM 或window对象。它提供了一个 JavaScript 执行上下文,但与浏览器提供的不同。

您可能可以通过使用另一个库(例如JSDOM)来提供 jQuery 可以使用的 DOM 来实现此功能。这是一个可以提供一些提示的搜索

第一个链接描述了JSDOM 和 jQuery 与 ExecJS 的使用,这可能与您想要的类似。

也就是说,为什么是 jQuery?有几个很好的Ruby HTML 解析器,包括Nokogiri。为什么不尝试其中之一?

于 2013-03-15T04:20:12.373 回答
-4

你不能在 Ruby 中运行 jQuery。jQuery 不是用 Ruby 编写的,它是用 JavaScript 编写的,因此您需要运行 JavaScript 解释器才能使用它。

于 2013-03-15T02:58:13.007 回答