全屏(信息亭)带有 WebView 的 NSWindowController 需要先点击才能点击任何链接
Fullscreen (kiosk) NSWindowController with WebView need click first before been able to click on any links
我正在创建一个应用程序,其功能之一是自助服务终端 Web 浏览器。
Web 浏览器位于 NSWindowController 中,发生了一件奇怪的事情:加载 NSWindowController 时,我将 WebView url 设置为默认值并开始加载页面。
一切都加载正常等,但在我单击 window 上的任何位置之前,我无法与 WebView 交互(即单击加载页面中的 link)。之后一切正常。看起来 window 丢失了 'focus',单击 window 后它获得了焦点,我看到光标在悬停在 links 等上时发生变化...
当我不使用 [[self.window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];
时,这不是问题
window 中也有几个按钮,但它们只在第一次点击时起作用,没有聚焦。
无论如何,这是完成大部分工作的代码:
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]]];
我假设你的 webView 在你点击它之前不是第一响应者。
您可以使用
更改此设置
[[self window] makeFirstResponder:webView];
还有[self.window makeKeyAndOrderFront:self];
或[NSApp activateIgnoringOtherApps:YES];
可以根据情况做出改变。如果这没有帮助,您可能需要在最初使用时根据延迟进行调用。
[self performSelector:@selector(myDelayedActivateFunction) withObject:nil afterDelay:0.0];
我正在创建一个应用程序,其功能之一是自助服务终端 Web 浏览器。
Web 浏览器位于 NSWindowController 中,发生了一件奇怪的事情:加载 NSWindowController 时,我将 WebView url 设置为默认值并开始加载页面。 一切都加载正常等,但在我单击 window 上的任何位置之前,我无法与 WebView 交互(即单击加载页面中的 link)。之后一切正常。看起来 window 丢失了 'focus',单击 window 后它获得了焦点,我看到光标在悬停在 links 等上时发生变化...
当我不使用 [[self.window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];
window 中也有几个按钮,但它们只在第一次点击时起作用,没有聚焦。
无论如何,这是完成大部分工作的代码:
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]]];
我假设你的 webView 在你点击它之前不是第一响应者。 您可以使用
更改此设置[[self window] makeFirstResponder:webView];
还有[self.window makeKeyAndOrderFront:self];
或[NSApp activateIgnoringOtherApps:YES];
可以根据情况做出改变。如果这没有帮助,您可能需要在最初使用时根据延迟进行调用。
[self performSelector:@selector(myDelayedActivateFunction) withObject:nil afterDelay:0.0];