class Origami::PDF::JavaScript::Engine
Attributes
context[R]
doc[R]
options[R]
parseInt[R]
privileged_mode[R]
Public Class Methods
new(pdf)
click to toggle source
# File lib/origami/javascript.rb, line 571 def initialize(pdf) @options = { viewerVersion: 11.008, viewerType: JavaScript::Viewers::ADOBE_READER, viewerVariation: JavaScript::Viewers::ADOBE_READER, platform: JavaScript::Platforms::WINDOWS, console: STDOUT, log_method_calls: false, privileged_mode: false } @doc = JavaScript::Doc.new(self, pdf) @context = V8::Context.new(with: @doc) @privileged_mode = @options[:privileged_mode] @parseInt = V8::Context.new['parseInt'] @hooks = {} end
Public Instance Methods
debugger_break()
click to toggle source
# File lib/origami/javascript.rb, line 671 def debugger_break exec 'debugger' end
enable_debugger(port = 5858)
click to toggle source
Binds the V8 remote debugging agent on the specified TCP port.
# File lib/origami/javascript.rb, line 667 def enable_debugger(port = 5858) V8::C::Debug.EnableAgent("Origami", port) end
exec(script)
click to toggle source
Evaluates a JavaScript
code in the current context.
# File lib/origami/javascript.rb, line 602 def exec(script) @context.eval(script) end
hook(name, &callback)
click to toggle source
Set a hook on a JavaScript
method.
# File lib/origami/javascript.rb, line 609 def hook(name, &callback) ns = name.split('.') previous = @context ns.each do |n| raise JavaScript::EngineError, "#{name} does not exist" if previous.nil? previous = previous[n] end case previous when V8::Function, UnboundMethod, nil then @context[name] = lambda do |*args| callback[previous, *args] end @hooks[name] = [previous, callback] else raise JavaScript::EngineError, "#{name} is not a function" end end
members(obj)
click to toggle source
Returns an Hash of all defined members in specified object name.
# File lib/origami/javascript.rb, line 640 def members(obj) members = {} list = @context.eval <<-JS (function(base) { var members = []; for (var i in base) members.push([i, base[i]]); return members; })(#{obj}) JS list.each do |var| members[var[0]] = var[1] end members end
privileged?()
click to toggle source
Returns true if the engine is set to execute in privileged mode. Allows execution of security protected methods.
# File lib/origami/javascript.rb, line 595 def privileged? @privileged_mode end
scope()
click to toggle source
Returns all members in the global scope.
# File lib/origami/javascript.rb, line 660 def scope members('this') end
unhook(name)
click to toggle source
Removes an existing hook on a JavaScript
method.
# File lib/origami/javascript.rb, line 633 def unhook(name) @context[name] = @hooks[name][0] if @hooks.has_key?(name) end