[MacRuby-devel] Visibility of ruby methods to objective-C delegates
Eloy Duran
eloy.de.enige at gmail.com
Tue Feb 2 13:22:44 PST 2010
Hi Michael,
Could you try if the webview/js bridge part of the code works, or
doesn't, in a normal MacRuby application? If it doesn't work, please
file a ticket on https://www.macruby.org/trac/newticket. If it does,
then it might be a HotCocoa problem, in which case please file a
ticket here: http://github.com/richkilmer/hotcocoa/issues
Thanks,
Eloy
On 1 feb 2010, at 15:51, Michael Pitra wrote:
>
> 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
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
More information about the MacRuby-devel
mailing list