2013-03-15 2 views
2

Ruby 애플리케이션에서 jQuery를 실행하고 HTML 문자열을 조작하는 데 사용하고 싶습니다. (네, 그 작업을 처리 할 수있는 다른 Ruby 라이브러리가 있다는 것을 알고 있습니다 만,이 경우 jQuery를 사용해야하는 좋은 이유가 있습니다.) 이것이 가능합니까? 난 내 루비 응용 프로그램에서 간단한 자바 스크립트 코드를 실행할 수 ExecJS를 사용할 수 있다는 것을 알고 있지만, jQuery를 제대로 동작하지 않습니다 :Ruby에서 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>' 

가 어떻게이 일을 어떻게해야합니까?

+0

Ajedi 비슷한 것을 시도하고이 질문을 던졌습니다. [웹 응용 프로그램의 서버 측과 클라이언트 측에서 비즈니스 논리를 공유하고 있습니까?] (http://programmers.stackexchange.com/questions/202567/sharing -business-logic-server-side-and-client-side-of-web-application/202586? noredirect = 1 # 202586) 알아 낸 내용을 알려주십시오! – thoughtpunch

+0

@thoughtpunch 불행히도 나는이 시간을 훨씬 더 연장 할 시간을 가지지 않았다. 레일스 애플리케이션에서 클라이언트와 서버 측 모두를 실행하는 일종의 MVC 라이브러리를 만들면 사용자가 번거로운 AJAX 기반 페이지로드 및 동적 자바 스크립트 애니메이션을 이용할 수 있습니다. 자바 스크립트를 사용할 수 있지만 아직 실행하지 않으면 (또는 Googlebot이 표시 될 때) 모든 것이 작동합니다. 나는 내가 어떻게이 일을 할 수 있을지 모르지만 몇 가지 아이디어를 가지고있다. 아직 아무런 단서가 없다. ... – Ajedi32

답변

3

오류 메시지는 문제가 무엇인지를 알려줍니다 :

ExecJS::ProgramError: ReferenceError: window is not defined 

JQuery와 DOM 조작을위한 라이브러리입니다. window 개체를 포함하여 모든 일반적인 DOM 개체와 인터페이스를 볼 것으로 예상됩니다.

사용중인 ExecJS 라이브러리는 DOM 또는 window 개체를 제공하지 않습니다. JavaScript 실행 컨텍스트를 제공하지만 브라우저가 제공하는 컨텍스트는 아닙니다.

JSDOM과 같은 다른 라이브러리를 사용하여 jQuery에서 사용할 수있는 DOM을 제공 할 수 있습니다. 여기에 a search that may give some tips입니다.

첫 번째 링크는 사용자가 원하는 것과 비슷한 use of JSDOM and jQuery with ExecJS을 설명합니다.

그렇다면 왜 jQuery가 필요할까요? Nokogiri을 포함하여 여러 개의 좋은 Ruby HTML parsers이 있습니다. 왜 그 중 하나를 시도하지?

+1

감사합니다. 이것은 내가 찾고있는 것입니다. jQuery를 사용하려는 이유는 꽤 복잡합니다. 기본적으로 [opal-jquery] (https://github.com/opal/opal-jquery)와 호환되는 인터페이스가 필요하므로 동일한 코드를 사용하여 클라이언트와 서버 측 DOM을 모두 조작 할 수 있습니다. 어쨌든 그 생각은 아니야. – Ajedi32

-2

Ruby에서 jQuery를 실행할 수 없습니다. jQuery는 Ruby로 작성된 것이 아니라 JavaScript로 작성되었으므로 JavaScript 인터프리터를 실행하여 사용해야합니다.

+0

어, 네. 하지만 ExecJS로 다른 JavaScript 코드를 실행할 수 있습니다. 왜 jQuery가 아닌가? – Ajedi32

+0

jQuery는 서버 측에서 가져올 수없는 DOM에서 작동하도록 작성되었습니다. 하지만 서버 측에서'$ .each'와 같은 유틸리티 메소드를 사용할 수있을 것이라고 확신합니다. – HungryCoder

+0

아니요, 일단 jQuery를로드하면이 오류가 발생하지 않고 1 + 1을 평가할 수도 없습니다. – Ajedi32