【问题标题】:How to force WebView to open links in default browser?如何强制 WebView 在默认浏览器中打开链接?
【发布时间】:2012-01-04 16:28:00
【问题描述】:

我正在编写一个 MacRuby (objective-c) 应用程序,它基本上是一个默认情况下打开特定网站(我的)的网络浏览器。

但是,我不想在 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

我做错了什么?

【问题讨论】:

    标签: objective-c webkit webview macruby


    【解决方案1】:

    如果您的目标是简单地使用用户的默认浏览器打开一个 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 中打开,并且我的“策略方法”没有被调用。你知道我做错了什么吗?
    • 也许我误解了这里的大局。首先,你为什么要创建一个 webview?它的目的是什么?
    • 它是围绕我的基于 Web 的聊天室应用程序的 GUI 包装器。当有人在聊天室中发布链接时,我希望这些链接在用户的默认浏览器中打开,而不是离开聊天室并在 800 x 400 像素的小聊天窗口中显示页面。
    • 啊,好吧,我完全理解你现在想要做什么。这可能有点暴力,但是如果您使用 -setResourceLoadDelegate 方法声明自己的资源加载委托对象会发生什么?这将为您的 WebView 尝试加载的每个资源调用委托(符合 WebResourceLoadDelegate 协议 - 请参阅bit.ly/yqgdm4),您可以检查目标以查看它是应该传递给 LaunchServices 的内部资源还是外部资源.抱歉,在快速阅读 WebView 文档后,我没有看到任何更简单的方法。
    • 好的,我会试试的。当您说“调用委托(符合 WebResourceLoadDelegate 协议)”时,除了指定要调用的方法之外,我还需要做什么才能使委托“符合”吗?我只是为任何需要委托的东西指定我的 AppDelegate,这可能是我的问题的一部分。
    猜你喜欢
    • 2011-07-26
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2015-11-01
    • 2015-11-30
    • 2011-06-21
    相关资源
    最近更新 更多