[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