java 运行 它的小程序如何在浏览器中显示?

How does java run its applets in the browser?

嗯,我们早已过了 Internet Explorer 中的 ActiveX 控件 运行 所以我的问题是 java 如何操纵浏览器在网页上显示小程序?

how does java manipulate the browser into displaying the applet on the web page?

没有。用户安装一个 NPAPI (Netscape Plugin API) plugin 告诉浏览器它可以 运行 Java 小程序。然后,当浏览器看到 Java 小程序时,它会启动插件。

值得注意的是 Chrome 不再支持 Linux 上的 NPAPI,它们是 scheduled to stop supporting it on Windows in September. As far as I know, officially Mozilla calls NPAPI plugins a "legacy" feature and recommends using other options, but is continuing to support them via click-to-play(至少目前是这样)..

Java 小程序由编译后的字节码组成,在下面执行 JVM的控制。 Applet 可能是不受信任的,这限制了它们的能力,也可能是受信任的,这增加了它们的访问权限并允许它们访问用户数据或硬件。

Java小程序运行在浏览器中使用Java插件技术(以下简称"Java Plug-in"),包含在JavaRuntime中环境 (JRE),在桌面的 Web 浏览器中启用 Java 小程序到 运行。 Java 插件为网络浏览器中的小程序提供了强大的功能。使用 Java 插件,小程序不在浏览器内的 JVM 中 运行。相反,它们在单独的进程中执行。可以在多个小程序之间共享同一个JVM进程,也可以将小程序放入不同的进程中,具体取决于现有的JVM是否符合小程序的要求,是否有足够的资源来执行小程序。

Web 浏览器的 Java脚本解释器引擎是单线程的。 Java 插件能够管理多个线程。 Java 插件为每个小程序创建一个单独的工作线程。小程序本身可能是多线程的。

下图显示了Java脚本解释器、Java插件和小程序之间的线程交互。

当 JavaScript 解释器空闲时,Java 插件在每个 applet 工作线程上执行 JavaScript 到 Java 调用(Java脚本解释器不忙场景)。

当一个 Java 到 JavaScript 调用正在进行中并且一个 JavaScript 到 Java 调用被调用时,后者在同一个线程上执行进行了 Java 到 Java 脚本调用(往返场景)。

当一个线程正在执行 Java 到 Java 脚本调用时,另一个想要执行相同操作的线程将被阻塞,直到第一个线程收到其结果并完成 (Java脚本解释器繁忙场景)

然而,Java扩展插件本身是使用NPAPI插件编写的,跨浏览器API插件。代表 Netscape 插件应用程序编程接口。它允许浏览器使用预编译插件形式的第三方代码在网页中无缝显示供应商特定的内容。本质上,它允许您从 Java 脚本代码中调用本机二进制代码。但是运行ning NPAPI插件,代码拥有当前用户的全部权限,对本机无限制访问。所以总而言之,使用 NPAPI,安全取决于插件的良好行为和大多数安全考虑 取决于插件开发人员。例如,插件实例可以加载 根据网页请求来自不同来源的资源。

在架构方面,Java 需要这些特权来提供它为 table 带来的那种权力和控制。 Java 和某些版本的 Flash 和 Shockwave 仍然使用 NPRuntime,需要启用 NPAPI 才能使 Java 在浏览器中正常运行。同时,许多浏览器如 Chrome 将此(NPAPI 插件)视为严重的安全漏洞,因为如果插件(使用 NPAPI)包含漏洞,攻击者可能能够利用该漏洞在用户的机器上安装恶意软件,同时 sine 插件(java 或 NPAPI)直接暴露给网络内容,使恶意网站更容易操纵您的插件,这就是为什么它使用户权限受到控制。浏览器远离它的另一个原因是移动设备不支持 NPAPI。还有一些较新的问题,例如 jit spraying http://en.wikipedia.org/wiki/JIT_spraying

虽然 Chrome 已正式停止对 NPAPI 的支持,但从 Chrome 版本 42 开始,需要额外的配置步骤才能继续使用 NPAPI 插件。 (只能工作到 2015 年 9 月)

在您的 URL 栏中,输入: chrome://flags/#enable-npapi 单击启用 NPAPI 配置选项的启用 link。 单击现在显示在配置页面底部的“重新启动”按钮。