我想在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>'我怎么才能让它工作呢?
发布于 2013-03-15 12:20:12
错误消息将告诉您问题所在:
ExecJS::ProgramError: ReferenceError: window is not definedjQuery是一个用于DOM操作的库。它期望看到所有常见的DOM对象和接口,包括window对象。
您正在使用的ExecJS库没有提供DOM或window对象。它提供了一个JavaScript执行上下文,但与浏览器提供的上下文不同。
您也许可以通过使用另一个库(如JSDOM )来提供jQuery可以使用的DOM,从而使其正常工作。这是a search that may give some tips。
第一个链接描述了可能与您想要的内容相似的use of JSDOM and jQuery with ExecJS。
也就是说,为什么是jQuery?有几个好的Ruby HTML parsers,包括Nokogiri。为什么不试试其中一个呢?
发布于 2013-03-15 10:58:13
你不能在Ruby中运行jQuery。jQuery不是用Ruby写的,它是用JavaScript写的,所以你需要运行一个JavaScript解释器来使用它。
https://stackoverflow.com/questions/15423454
复制相似问题