【问题标题】:Getting the current URL and title from WebView从 WebView 获取当前 URL 和标题
【发布时间】:2012-10-07 00:39:11
【问题描述】:

我正在尝试从 WebView 获取当前 URL 和标题。我已将其用于 URL

- (void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
{
    // Only report feedback for the main frame.
    if (frame == [sender mainFrame]){
        NSString *url = [[[[frame provisionalDataSource] request] URL] absoluteString];
        [addressBar setStringValue:url];
    }
}

标题如下:

- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame
{
    // Report feedback only for the main frame.
    if (frame == [sender mainFrame]){
        [[sender window] setTitle:title];
    }
}

此代码直接来自 Apple 的 WebKit Objective-C 编程指南。我只是将 URL 方法稍微修改为 addressBar 而不是 textField。但它不起作用。 addressBar 字段永远不会填充页面的 URL,并且窗口标题不会更新 ether。界面生成器中的所有内容都已正确连接。为什么它不起作用?

【问题讨论】:

  • 检查委托函数是否被调用。如果没有设置 Webview 的委托。

标签: xcode macos cocoa xcode4 webkit


【解决方案1】:

如果页面已经加载,那么它不是临时数据源,将其替换为

[[[[frame dataSource] request] URL] absoluteString];

【讨论】:

  • 我试过了,但还是不行。我仍然没有运气。
【解决方案2】:

这就是你的工作。

  1. WebView 对象设置frameLoadDelegate。在您的可视界面中,从您的WebView 元素控制并拖动到包含WebViewNSWindow。松开鼠标时,会出现一个黑色的小下拉菜单。选择frameLoadDelegate。完成此操作后,webView:DidReceiveTitle:forFrame 等消息将发送到您的 NSWindow 实例。
  2. NSWindow 创建一个子类并将您的NSWindow 对象分配给该子类。由于这个新的子对象将继承 NSWindow 的所有内容,因此它将收到 webView:DidReceiveTitle:forFrame 消息。
  3. 将上面的代码粘贴到这个新的子类中。这有效地覆盖了父类的方法定义,并让您自主控制发生的事情。

希望对您有所帮助。

【讨论】:

    【解决方案3】:

    很遗憾,我自己也不知道。但是我发现了一个很棒的网站,里面有教程,其中之一是制作一个 RSS 提要,它从 RSS 中获取标题。如果向下滚动,您会看到它。希望你能修改它来工作!!

    http://www.raywenderlich.com/2636/how-to-make-a-simple-rss-reader-iphone-app-tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2010-10-30
      相关资源
      最近更新 更多