在模态NSSheet中使用Webview

时间:2013-03-16 21:36:47

标签: objective-c macos webkit

我遇到的问题与this SO question类似。我想在NSSheet中有一个webview,我在其中进行一些身份验证以检索API令牌。

我使用相应的xib文件创建了一个新的NSWindowController子类。这就是我启动NSSheet的方式:

- (IBAction)startAuthentication:(NSButton *)sender {
    self.authController = [[AuthenticationWindowController alloc] initWithWindowNibName:@"AuthenticationWindow"];
    [[NSApplication sharedApplication] beginSheet:self.authController.window
                                   modalForWindow:[self.exportManager window]
                                    modalDelegate:self
                                   didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
                                      contextInfo:nil];
}

在这个authenticationWindowController的windowDidLoad回调中,我将webview指向URL:

- (void)windowDidLoad
{
    [super windowDidLoad];
    [[self.webView mainFrame]loadRequest:[NSURLRequest requestWithURL:authURL]];
}

乍一看看起来很棒:如果我按下按钮,则调用startAuthentication操作方法,并将新窗口设置为父窗口的动画并加载authURL。网站正确显示,其HTML表单包含两个输入字段(用户名和密码)。

问题是,我可以单击页面并且它可以正常工作,但是如果我尝试单击一个文本字段,以便该字段获得焦点则不起作用。网站表单的文本字段中没有光标,每次按键后我都会听到NSBeep()声音。

我对这个主题做了一些研究,我发现了两个参考文献:

让我感到困惑的是,有Facebook Exporter for Aperture插件,它可以准确显示我想要的内容:模态表中的webview。但是,我无法找出他们的不同之处。在Facebook Exporter中,我没有找到任何直接与run循环交互的代码。

我的问题

  1. 这是模态表中webview的已知问题吗?
  2. 这两个参考文献中解释的问题是否仍然存在?
  3. 我怎样才能使这个工作?我不明白何时切换runloop模式。

1 个答案:

答案 0 :(得分:3)

这没有一般问题,我只是再试一次。除了这个必须是一些代码?你能把它缩小到表格吗?顺便说一句:我的样本:

https://dl.dropbox.com/u/3753090/test2.zip


但是所有这一切,模态运行模式和webviews / timers / networking都不是很防水:) 因为:当您通过NSApp中的一种便捷方法进入模态时,runloop仅以非常有限的方式运行。 :/