我一直在努力了解Flash动画或Java Applet如何在浏览器中运行。
我可以想到几种方法 -
Flash Player / Java Applet是动态链接并给定的机器代码 关于属于他们的屏幕区域的一些参数;之后,他们 在相同的流程空间内运行。
浏览器公开了一个API,播放器/小程序用来与它通信并且它们存在 在一个单独的过程中。 (据推测他们通过套接字进行通话?)API可以对应 openGL / X11 /一些自定义调用。
这些可能性仍无法解释按钮点击如何制作 播放器全屏,如何播放音乐,如何检查DOM等等。就此而言, 是通过解码到一系列图像并渲染它们而显示的视频 一次一个,或者是否有更有效的方式,例如,推动图像中的增量?
Java Applets上的Wikipedia页面(1) 讨论applet如何在沙盒中运行(可能是一个单独的过程),但是 它没有说明浏览器和小程序如何通信。
也许答案取决于底层平台?
任何有关本主题系统讨论的指示都将受到赞赏(如同 对API的引用。)
(我对此的兴趣源于永不满足的好奇心。)
答案 0 :(得分:4)
我非常确定Java applet和Flash等插件在大多数浏览器中都通过NPAPI运行。我不久前自己调查了这件事,NPAPI就是我找到的答案。
答案 1 :(得分:2)
对于浏览器和Java小程序,小程序通常在Java插件中运行,该插件作为单独的进程运行(您可以在Windows中的任务管理员中看到它)。
该插件为DOM中的每个applet创建一个对象,因此您可以从Javascript与applet进行交互。无论如何,调用需要一段时间才能返回的applet确实会冻结浏览器,因此我会说与插件的通信与主刷新循环在同一个线程中运行。这似乎至少与Firefox有关。