我在safari上工作,在OSX之上,使用核心图形,我有一个运行两个线程的插件(主要和渲染计时器线程)。渲染计时器线程调用“NPN_InvalidateRect”,而主插件线程处理相应的事件并重绘自身。然而,这似乎在safari 32位与safari 64位中的工作方式不同:
问题:
是否有更好的方法强制插件呈现自身,同时坚持原生NPAPI,核心图形以及对碳和可可事件模型的支持。
如果没有,我如何在运行时检测浏览器是否运行32位而不是64位应用程序,以便我可以选择呼叫的NPN功能。
谢谢,
(交叉发布到firebreath,我会在两个地方发布回复)
答案 0 :(得分:1)
首先,这个:
渲染计时器线程调用“NPN_InvalidateRect”
是一个严重的问题,除非你的意思是你的渲染计时器线程导致在主插件线程上调用NPN_InvalidateRect。 NPAPI显然不是线程安全的,你需要在主线程上调用像NPN_InvalidateRect这样的方法。
其次,你真的不应该调用NPN_ForceRedraw。 Chromium,Firefox OOP,WebKit2,几乎可以肯定Safari的OOP模式(这是你在64位中得到的)将NPN_ForceRedraw视为无操作;强制立即重绘的概念违背了整个OOP插件模型。在所有情况下,您应该只调用NPN_InvalidateRect,并信任浏览器给您回电。在OOP插件世界中,您不应期望能够强制浏览器在任何给定时刻呈现插件。