Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行Youtube嵌入式播放器内置(cocoa)屏幕保护程序-如何阻止/捕获假用户事件?_Cocoa_Webview_Youtube_Youtube Api_Screensaver - Fatal编程技术网

运行Youtube嵌入式播放器内置(cocoa)屏幕保护程序-如何阻止/捕获假用户事件?

运行Youtube嵌入式播放器内置(cocoa)屏幕保护程序-如何阻止/捕获假用户事件?,cocoa,webview,youtube,youtube-api,screensaver,Cocoa,Webview,Youtube,Youtube Api,Screensaver,Youtube播放器似乎发送假用户输入事件,以防止屏幕保护程序启动(我在osx/safari上,但在windows中也会发生同样的情况)。嵌入式播放器和yt网站上的播放器都会出现这种情况。我猜这是精心设计的,这样屏幕保护程序就不会在你试图观看视频时打扰你了 然而,我正试图从屏幕保护程序中播放youtube视频,因此我希望捕获并忽略或关闭这些事件。我的屏幕保护程序在优雅退出时可以工作6-8秒,就像用户移动鼠标一样。我认为在windows下,我可以捕捉到它并忽略它,但我是为OSX编写的,所以我似乎无

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文件

#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