[MacRuby-devel] Visibility of ruby methods to objective-C delegates
Michael Pitra
michael at pitra.at
Mon Feb 1 06:51:12 PST 2010
I'm trying to do something similar to this example:
http://code.reflectivepixel.com/post/103638573/require-hotcocoa-framework-webkit-class
Code excerpt:
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
Clicking on "tell" does not work. It seems, that the selector for
"click:" is not found. When logging the selector values in
self.isSelectorExcludedFromWebScript(sel), the "click:" selector is not
amongst the results.
What am I missing here?
Regards,
Michael
More information about the MacRuby-devel
mailing list