具有WebView的全屏(kiosk)NSWindowController需要首先单击,然后才能单击任何链接

时间:2018-10-31 21:52:34

标签: objective-c cocoa webview fullscreen nswindowcontroller

我正在创建一个具有信息亭网络浏览器作为其功能之一的应用程序。

Web浏览器位于NSWindowController中,并且发生了一件奇怪的事情:加载NSWindowController时,我将WebView网址设置为默认网址,然后开始加载页面。 一切正常,等等,但是在单击窗口中的任何位置之前,我无法与WebView交互(即,单击加载页面中的链接)。之后,一切正常。看起来该窗口缺少“焦点”,单击该窗口后它获得焦点,并且我将鼠标悬停在链接等上时会看到光标发生变化...

当我不使用[[self.window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];

时,这不是问题

窗口中也有几个按钮,但是它们只在第一次单击时起作用而没有聚焦。

无论如何,以下是完成大部分工作的代码:

NSApplicationPresentationOptions options =
NSApplicationPresentationHideMenuBar|NSApplicationPresentationHideDock|
NSApplicationPresentationDisableHideApplication|
NSApplicationPresentationDisableProcessSwitching|
NSApplicationPresentationDisableAppleMenu| NSApplicationPresentationDisableForceQuit;

[NSApp setPresentationOptions:options];
[[self.window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];


[self.webView setFrameLoadDelegate:self];
[self.webView setPolicyDelegate:self];

NSString *url = [[NSString alloc] initWithString:@"https://www.google.com"];
[[self.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];

1 个答案:

答案 0 :(得分:1)

在您单击它之前,我假设您的webView不是第一响应者。 您可以使用

进行更改
[[self window] makeFirstResponder:webView];

[self.window makeKeyAndOrderFront:self];[NSApp activateIgnoringOtherApps:YES];也可以根据情况进行更改。如果这样做无济于事,则您可能需要在最初使用呼叫时使其具有延迟依赖性。

[self performSelector:@selector(myDelayedActivateFunction) withObject:nil afterDelay:0.0];