Objective-C:从WebView获取网页标题

时间:2013-12-08 18:06:07

标签: objective-c macos url webview

我正在尝试检索网页的标题并将其显示在NSWindows标题中。这个应用程序是基于文档的,我没有在AppDelegate的独立应用程序中尝试过任何东西。我将如何前往检索标题并在窗口中显示?

更新:这是我的代码(注意:还不行)

TitleWindow.h

#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>
@interface TitleWindow : NSWindow <NSApplicationDelegate> {

}

@property

(retain, nonatomic) IBOutlet NSWindow *displayTitle;

@end

TitleWindow.m

#import "TitleWindow.h"
#import <WebKit/WebKit.h>

@implementation TitleWindow


- (void)displayTitle:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame
{
    if (frame == [sender mainFrame]){
        [[sender window] setTitle:title];
    }
}

@end

1 个答案:

答案 0 :(得分:0)

获取NSWebViews页面标题。

您使用 mainFrameTitle

NSString * pageTitleString =[_webView mainFrameTitle];
    NSLog(@"%@" , pageTitleString);

Read the Docs

示例2。

WebFrameLoadDelegate_Protocol

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)webFrame{

    [_window setTitle:[_webView mainFrameTitle]];

    }

更新2

之前我还没有真正构建过基于文档的应用程序。因此设置一个以显示Web视图很有趣:-P。

这让我觉得这个问题有两个方面。


我发布的第一件事就是将示例2代码添加到document.m是不够的。

webview需要一名代表。

对我来说有用但可能不是(可能不是)正确的方法是在 Document.xib 中选择了webview。

顶部的Connections Inspector显示 frameLoadDelegate

我将其连接到文件的所有者,将其拖到文件夹文件的所有者 >窗格。

这很有用。

每次我从文档中更改网页时,标题都随之改变。

enter image description here


要注意的第二件事是我认为设置文档标题的真正方法是:

[self setDisplayName:@"a title"];

在设置时有效:

- (void)windowControllerDidLoadNib:(NSWindowController *)aController

{
    [super windowControllerDidLoadNib:aController];


    // Add any code here that needs to be executed once the windowController has loaded the document's window.

 NSURLRequest* request = [NSURLRequest requestWithURL:_theUrls];
    [[_webView mainFrame] loadRequest:request];
     [self setDisplayName:@"a title"];
}

一个正常的字符串,但如果我把它改为:

[self setDisplayName:[_webView mainFrameTitle]];

它不起作用,因为框架尚未加载,因此没有标题。

所以你会想到[self setDisplayName:[_ webView mainFrameTitle]];可以在WebFrameLoadDelegate中工作。不,不是的。我不确定为什么。

所以现在你可能想要使用示例2代码中的代码。