[MacRuby-devel] [MacRuby] #594: Not all methods visible to objective-c calls
MacRuby
ruby-noreply at macosforge.org
Tue Feb 2 14:38:06 PST 2010
#594: Not all methods visible to objective-c calls
------------------------------+---------------------------------------------
Reporter: michael@… | Owner: lsansonetti@…
Type: defect | Status: new
Priority: blocker | Milestone:
Component: MacRuby | Keywords:
------------------------------+---------------------------------------------
The following code is taken from
http://code.reflectivepixel.com/post/103638573/require-hotcocoa-framework-
webkit-class and is just a short example of showing the problem:
{{{
require 'hotcocoa'
framework 'webkit'
class Application
include HotCocoa
FULL={:expand => [:width,:height]}
BASE=<<-END
<html><head><style type="text/css">
* { font-family: Monaco; }
</style><script type="text/javascript">
function say(arg) { window.TheBridge.click(arg);}
</script>
</head><body><h3>Ruby JavaScript Bridge</h3>
<a href="#" onclick="say('hi')">tell</a></body></html>
END
def click(arg) #called from javascript
root = document.createElement("div");
root.innerHTML="javascript tells ruby: #{arg}"
document.body.appendChild(root)
end
def document
@web_view.mainFrame.DOMDocument
end
def self.webScriptNameForSelector(sel) #hide : in name
sel.to_s.sub(/:$/,'') if is_available_selector?(sel)
end
def self.isSelectorExcludedFromWebScript(sel)
! is_available_selector?(sel)
end
def self.isKeyExcludedFromWebScript(key)
true
end
def self.is_available_selector?(sel)
['click:'].include?(sel.to_s)
end
def start
application :name => "MyBridge" do |app|
app.delegate = self
window :title => "MyBridge",
:frame => [10, 620, 330, 230] do |win|
win << @web_view=web_view(:layout => FULL) do |wv|
wv.mainFrame.loadHTMLString BASE, baseURL: nil
wv.frameLoadDelegate=self
wso=wv.windowScriptObject #make visible to JS
wso.setValue(self, forKey:"TheBridge")
end
win.will_close { exit }
end
end
end
end
Application.new.start
}}}
In this example, clicking on "tell" does not work. It seems, that the
selector for "click:" is not found. When logging for example the selector
values in {{{ self.isSelectorExcludedFromWebScript(sel) }}}, the "click:"
selector is not amongst the results.
This is not related to hotcocoa, this example can be simply reworked
without using hotcocoa, just with a simple WebView embedded in a NSWindow
from Interface Builder.
--
Ticket URL: <http://www.macruby.org/trac/ticket/594>
MacRuby <http://macruby.org/>
More information about the MacRuby-devel
mailing list