我已在我的应用中为网址安装了Apple事件处理程序:
OSStatus e = AEInstallEventHandler( kInternetEventClass,
kAEGetURL,
NewAEEventHandlerUPP(AppleEventProc),
(SRefCon)this,
false);
如果我的应用程序正在运行,那就可以了。但是,如果我的应用程序未运行,则单击浏览器中的URL将启动应用程序,但我的处理程序上未收到Apple Event。我对AEInstallEventHandler的调用是在我的应用程序的启动阶段,在它到达消息循环之前。这不是我做的第一件事,但离它不太远。 (显然我正确地设置了plist,因为我在跑步时得到了事件)
有关如何使其发挥作用的任何想法?
有趣的是,当Chrome启动我处理mailto URL时,它会在命令行上传递“-psn_0_5100765”。这对我没有任何意义,是否有人知道它试图告诉我什么?
注意:我已经设置了Apple Event调试并再次运行它。在安装了回调处理程序之后,我肯定会在启动时发送一个GURL事件。但是我仍然无法解决为什么我的回调没有用该事件调用。
答案 0 :(得分:0)
所以我有一些使用ReceiveNextEvent的代码:
var gulp = require('gulp');
var imagemin = require('gulp-imagemin');
var imageminJpegRecompress = require('imagemin-jpeg-recompress');
gulp.task('optimize', function () {
return gulp.src('src/images/*')
.pipe(imagemin([
imagemin.gifsicle(),
imageminJpegRecompress({
loops:4,
min: 50,
max: 95,
quality:'high'
}),
imagemin.optipng(),
imagemin.svgo()
]))
});
在应用程序启动期间多次调用它。发生的事情是这些事件的处理没有考虑到为kEventAppleEvent事件调用AEProcessEvent的需要。这是在RunApplicationEventLoop中自动完成的,但如果使用ReceiveNextEvent循环,则必须手动完成。所以我把它添加到我的循环中:
while
(
ReceiveNextEvent
(
0,
NULL,
0.001, // kEventDurationForever,
kEventRemoveFromQueue,
&theEvent
)
==
noErr
)
{
SendEventToEventTarget(theEvent, theTarget);
ReleaseEvent(theEvent);
}
现在它可以在启动时和运行时运行。
Uli Kusterer负责指出我正确的方向。非常感谢他。