如何强制WebView在默认浏览器中打开链接?
问题描述:
我正在写一个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
我在做什么错?
答
如果您的目标是用用户的默认浏览器简单打开URL,则不想直接使用WebKit - 您想使用LaunchServices API。请参阅http://developer.apple.com/library/mac/#documentation/Carbon/Reference/LaunchServicesReference/Reference/reference.html
因此,使用LaunchServices API将取代我的'NSWorkspace.sharedWorkspace.openURL(request.URL)'?我仍然需要防止在WebView内打开这些外部链接,并且我的“策略方法”没有被调用。你知道我做错了什么吗? – Andrew 2012-01-05 00:14:53
也许我误解了这里的大局。首先,你为什么要创建一个webview呢?它的目的是什么? – jkh 2012-01-05 17:38:03
这是一个围绕我的网络聊天室应用程序的GUI包装。当有人在聊天室中发布链接时,我希望这些链接在用户的默认浏览器中打开,而不是离开聊天室并在800×400px的小型聊天窗口中显示页面。 – Andrew 2012-01-05 18:23:15