2012-01-04 170 views
0

我正在写一个MacRuby(objective-c)应用程序,它基本上是一个默认打开特定网站(我的)的网络浏览器。如何强制WebView在默认浏览器中打开链接?

但是,我不希望链接在WebView中打开。我宁愿他们在用户的默认浏览器中打开。这是迄今为止的代码,但它似乎并没有调用decidePolicyForNavigation方法。

framework "WebKit" 

class AppDelegate 
    attr_accessor :window 

    def applicationDidFinishLaunching(notification) 
     load_web_view 
    end 

    def load_web_view 
     web_view = WebView.new 
     request = NSURLRequest.requestWithURL(NSURL.URLWithString("http://example.com")) 
     web_view.mainFrame.loadRequest(request) 
     window.contentView = web_view 
     web_view.frameLoadDelegate = self 
     web_view.setPolicyDelegate(self) 
    end 

    # this makes it so links open in the default browser 
    def webView(view, decidePolicyForNavigationAction:actionInformation, request:request, frame:frame, decisionListener:listener) 
     puts 'running nav policy' 
     listener.ignore 
     NSWorkspace.sharedWorkspace.openURL(request.URL) 
    end 
end 

我在做什么错?

回答

0

如果您的目标是用用户的默认浏览器简单打开URL,则不想直接使用WebKit - 您想使用LaunchServices API。请参阅http://developer.apple.com/library/mac/#documentation/Carbon/Reference/LaunchServicesReference/Reference/reference.html

+0

因此,使用LaunchServices API将取代我的'NSWorkspace.sharedWorkspace.openURL(request.URL)'?我仍然需要防止在WebView内打开这些外部链接,并且我的“策略方法”没有被调用。你知道我做错了什么吗? – Andrew 2012-01-05 00:14:53

+0

也许我误解了这里的大局。首先,你为什么要创建一个webview呢?它的目的是什么? – jkh 2012-01-05 17:38:03

+0

这是一个围绕我的网络聊天室应用程序的GUI包装。当有人在聊天室中发布链接时,我希望这些链接在用户的默认浏览器中打开,而不是离开聊天室并在800×400px的小型聊天窗口中显示页面。 – Andrew 2012-01-05 18:23:15

相关问题