以下代码崩溃了我的插件:
NSOpenPanel *openFileDig = [NSOpenPanel openPanel];
[openFileDig setCanChooseFiles:true];
[openFileDig setCanChooseDirectories:false];
[openFileDig setAllowsMultipleSelection:false];
[openFileDig setDirectory:NSHomeDirectory()];
if ([openFileDig runModal] == NSOKButton)
{
.........
}
在没有做任何事情的情况下,在大约3分钟内,当openFileDig
正在运行时,插件将会消失。有人可以告诉我为什么吗?
答案 0 :(得分:2)
你在NPAPI调用中阻塞主线程 - 这几乎是NPAPI no-no#1。
永远永远在NPAPI呼叫期间阻止主线程。如果你需要做一些需要一段时间并需要回电的事情,你应该异步进行,然后将回调发回javascript。 (传递给你的npapi函数的js函数将是一个NPObject,你可以调用NPN_InvokeDefault来调用)
由于你的runModal需要在主线程上运行,你需要使用类似performSelectorOnMainThread来调用一个函数来调用它,然后在完成后调用你的js回调。还要记住,所有NPAPI调用都必须在主线程上进行,你应该很好。
您的插件会阻塞,因此浏览器长时间没有从插件中回复后会假设它崩溃并导致其崩溃。