运行Youtube嵌入式播放器内置(cocoa)屏幕保护程序-如何阻止/捕获假用户事件?
Youtube播放器似乎发送假用户输入事件,以防止屏幕保护程序启动(我在osx/safari上,但在windows中也会发生同样的情况)。嵌入式播放器和yt网站上的播放器都会出现这种情况。我猜这是精心设计的,这样屏幕保护程序就不会在你试图观看视频时打扰你了 然而,我正试图从屏幕保护程序中播放youtube视频,因此我希望捕获并忽略或关闭这些事件。我的屏幕保护程序在优雅退出时可以工作6-8秒,就像用户移动鼠标一样。我认为在windows下,我可以捕捉到它并忽略它,但我是为OSX编写的,所以我似乎无法将它捕获到我的代码中,因为它从未到达我的代码中——它由ScreenSaverEngine应用程序处理。Mac屏幕保护程序是此应用程序的插件,因此它们无法覆盖主事件循环(调用NSApplication::sendEvent)。我第一次听到这个事件是在applicationShouldTerminate()委托中。我可以请求应用程序稍后终止,但这只会推迟关机约1秒。下面是堆栈跟踪——据我所知,这是一个MouseExit-apple事件 我看了又看,我找不到一种方法来禁用或捕获这些播放器事件,无论是在cocoa还是在javascript中。我的实际视频加载到WebView中,并使用youtube javascript api运行,但下面的精简测试代码会产生相同的结果。通过执行以下操作,我也可以在不运行任何代码的情况下获得相同的结果: (1) 在youtube上播放视频(无论是否嵌入) (2) 通过hot corner或其他方式手动启动屏幕保护程序 (3) 等几秒钟 很长一段时间以来,我一直认为这是我代码中的一个bug,因为我对objective-c和javascript不熟悉,但现在我认为这是出于设计,因为上面的步骤根本不使用我的代码就重现了这个问题 屏幕保护程序测试代码------.h文件运行Youtube嵌入式播放器内置(cocoa)屏幕保护程序-如何阻止/捕获假用户事件?,cocoa,webview,youtube,youtube-api,screensaver,Cocoa,Webview,Youtube,Youtube Api,Screensaver,Youtube播放器似乎发送假用户输入事件,以防止屏幕保护程序启动(我在osx/safari上,但在windows中也会发生同样的情况)。嵌入式播放器和yt网站上的播放器都会出现这种情况。我猜这是精心设计的,这样屏幕保护程序就不会在你试图观看视频时打扰你了 然而,我正试图从屏幕保护程序中播放youtube视频,因此我希望捕获并忽略或关闭这些事件。我的屏幕保护程序在优雅退出时可以工作6-8秒,就像用户移动鼠标一样。我认为在windows下,我可以捕捉到它并忽略它,但我是为OSX编写的,所以我似乎无
#import <WebKit/WebKit.h>
#import <ScreenSaver/ScreenSaver.h>
@interface YtTestView : ScreenSaverView
{
WebView * webView;
}
@end
--------应用程序中的堆栈跟踪应终止()-仅供参考
2013-05-20 23:41:20.558 ScreenSaverEngine[2143:c07]事件:NSEvent:type=Kitdefined loc=(0800)time=21467.6 flags=0 win=0x0 winNum=0 ctxt=0x0 subtype=1=619 data2=0
2013-05-20 23:41:20.558 ScreenSaverEngine[2143:c07]窗口类名称:(空)
2013-05-20 23:41:20.559屏幕保护引擎[2143:c07]事件:类型=13
2013-05-20 23:41:20.561屏幕保护工程[2143:c07]0:0 Ytss 0x0000000106167327-[YTSView(NSApplicationLegate)应用程序应终止:+343
2013-05-20 23:41:20.562屏幕保护工程[2143:c07]1:1应用套件0x00007fff85623e6f-[n应用程序_docController:shouldTerminate:+75
2013-05-20 23:41:20.562屏幕保护工程[2143:c07]2:2应用工具包0x00007fff85623d7e\uu91-[NSDocumentController(NSInternal)\u关闭所有文档,委托人:shouldTerminateSelector:\u块\u调用\u 0+159
2013-05-20 23:41:20.562屏幕保护引擎[2143:c07]3:3应用套件0x00007fff85623c1a-[NSDocumentController(NSInternal)\关闭所有文档,其代表:shouldTerminateSelector:+1557
2013-05-20 23:41:20.563屏幕保护引擎[2143:c07]4:4应用套件0x00007fff856235de-[NSDocumentController(NSInternal)\关闭所有文档,其代表:shouldTerminateSelector:+265
2013-05-20 23:41:20.563屏幕保护工程[2143:c07]5:5应用套件0x00007fff856234af-[n应用程序应终止]+772
2013-05-20 23:41:20.563屏幕保护引擎[2143:c07]6:6应用套件0x00007fff8565127f-[n应用程序(NSAppleEventHandling)\u手动设备]+403
2013-05-20 23:41:20.566屏幕保护程序引擎[2143:c07]7:7应用程序套件0x00007fff854001b1-[n应用程序(NSAppleEventHandling)\u处理事件:带回复事件:+660
2013-05-20:23:41: 20.567屏幕SAVEngEng[ 2143:C07 ] 8:8基金会0x000
2013-05-20:23:41: 20.567屏幕引擎引擎[ 2143:C07 ] 9:9基金会0x000
2013-05-20 23:41:20.567屏幕保护工程[2143:c07]10:10 AE 0x00007fff906fa078
2013-05-20 23:41:20.567屏幕保护工程[2143:c07]11:11 AE 0x00007fff906f9ed9 ZL25调度事件和发送回复K6AEDESCPS+37
2013-05-20 23:41:20.569屏幕保护程序引擎[2143:c07]12:12 AE 0x00007fff906f9d99 AEProcessAppleeEvent+318
2013-05-20 23:41:20.570屏幕保护程序引擎[2143:c07]13:13 HIToolbox 0x00007fff8d599709 AEProcessAppleEvent+100
2013-05-20 23:41:20.570屏幕保护引擎[2143:c07]14:14应用套件0x00007fff853fc866
2013-05-20 23:41:20.570屏幕保护工程[2143:c07]15:15应用程序套件0x00007fff853fbe22-[n应用程序下一个虚拟机任务:untilDate:inMode:dequeue:+128
2013-05-20 23:41:20.570 ScreenSaverEngine[2143:c07]16:16 ScreenSaverEngine 0x0000000104b6e747-[ScreenSaverApplicationNextEventMachingTask:untilDate:inMode:dequeue:+49
2013-05-20 23:41:20.571屏幕保护程序引擎[2143:c07]17:17应用程序套件0x00007fff853f31d3-[n应用程序运行]+517
2013-05-20 23:41:20.571屏幕保护引擎[2143:c07]18:18屏幕保护引擎0x0000000104b6e5a3 main+551
2013-05-20 23:41:20.571屏幕保护引擎[2143:c07]19:19 libdyld.dylib0x00007fff907b47e1启动+0
2013-05-20 23:41:20.571屏幕保护引擎[2143:c07]20:20???0x0000000000000001 0x0+1
#import "YtTestView.h"
@implementation YtTestView
- (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
self = [super initWithFrame:frame isPreview:isPreview];
if (self) {
[self setAnimationTimeInterval:1/30.0];
}
return self;
}
- (void)startAnimation
{
[super startAnimation];
webView = [[WebView alloc] initWithFrame:[self bounds]];
[webView setFrameLoadDelegate:self];
[webView setShouldUpdateWhileOffscreen:YES];
[webView setPolicyDelegate:self];
[webView setUIDelegate:self];
[webView setEditingDelegate:self];
[webView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
[webView setAutoresizesSubviews:YES];
[webView setDrawsBackground:NO];
[webView setMaintainsBackForwardList:NO];
[self addSubview:webView];
NSString * url= @"http://www.youtube.com/embed/NleT--L6fNo?autoplay=1";
[webView setMainFrameURL:url];
}
- (void)stopAnimation
{
[super stopAnimation];
}
- (void)drawRect:(NSRect)rect
{
[super drawRect:rect];
}
- (void)animateOneFrame
{
return;
}
- (BOOL)hasConfigureSheet
{
return NO;
}
- (NSWindow*)configureSheet
{
return nil;
}
@end