Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight “我该怎么做?”;“爆发”;浏览器的';什么是沙箱?_Silverlight_Web Applications_Cross Browser_Activex_Cross Platform - Fatal编程技术网

Silverlight “我该怎么做?”;“爆发”;浏览器的';什么是沙箱?

Silverlight “我该怎么做?”;“爆发”;浏览器的';什么是沙箱?,silverlight,web-applications,cross-browser,activex,cross-platform,Silverlight,Web Applications,Cross Browser,Activex,Cross Platform,我需要创建一个web控制的应用程序(位于浏览器中),该应用程序可以连接到通过USB或串行端口连接的设备并从中读取数据 目前,我正在使用ActiveX控件来执行此操作。不过,我想重新编写这个系统,使其能够跨浏览器(支持Firefox)并最终跨平台(支持Mac上的Safari)。ActiveX既不是跨浏览器也不是跨平台的,所以我正在寻找一种替代技术 我的第一个倾向是使用Silverlight,因为Silverlight4允许访问COM自动化。不幸的是,这只适用于OOB(浏览器外)Silverligh

我需要创建一个web控制的应用程序(位于浏览器中),该应用程序可以连接到通过USB或串行端口连接的设备并从中读取数据

目前,我正在使用ActiveX控件来执行此操作。不过,我想重新编写这个系统,使其能够跨浏览器(支持Firefox)并最终跨平台(支持Mac上的Safari)。ActiveX既不是跨浏览器也不是跨平台的,所以我正在寻找一种替代技术

我的第一个倾向是使用Silverlight,因为Silverlight4允许访问COM自动化。不幸的是,这只适用于OOB(浏览器外)Silverlight应用程序-浏览器内系统仍然绑定在沙箱中,无法访问


那么,现有哪些技术(框架、浏览器插件等)允许我从基于浏览器的web应用程序中与USB/串行设备进行接口?每种方法的优缺点是什么?

我认为在这种情况下,最好的选择可能是Java。USB,虽然在协议方面是一个行业标准,但在裸机实现方面肯定不是标准化的。出于这个原因,对于您打算支持的每个不同平台(windows、linux、osx、bsd),您仍然需要一个不同的Java USB实现。当然,您还必须支付代码签名证书的费用,以便您可以尝试说服人们授予您的应用程序所需的访问权限;浏览器极力拒绝访问的东西,在这个时代,大多数人都不愿意同意。也就是说,这里有一篇关于各种javausb项目的IBM老文章值得一读。祝你好运


-这可能会很痛,但你可以用一个。签名Java小程序可以完全访问用户的系统

Java没有内置的USB支持,所以您可能需要将自己的接口应用到本机USB API

在applet中使用JNI可能很棘手。我以前做过。如果你用谷歌搜索这个主题,大多数结果都会说“不要做”或“你做不到”。好吧,你可以做到

我就是这样做的:我将本机库(DLL、so等)打包到applet的JAR中,然后使用例如从JAR中读取本机库。然后,我将库写到磁盘上的适当位置(例如${user.home}/.myapp/),然后使用加载JNI DLL

JNI库和小程序可能存在一些类加载器问题。这些问题很微妙,很难解释。它们基本上与以下事实有关:JVM只能在每个VM实例中加载和绑定一个给定的JNI库一次,但是小程序会被实例化很多,通常是使用它们自己的新类加载器,这可能会有问题。Sun在中对进程分离所做的工作可能缓解了其中一些问题,但您的用户只有在使用Java 1.6.0_10或更高版本时才会遇到这些问题

也可以在已签名的小程序中使用。我不建议使用JNA直接访问USB API。但是JNA有时可以为访问简单的本机函数节省大量时间。尽管一旦您设置了JNI基础设施,JNA的价值可能会降低


以下是一些其他随意的想法:

  • Java WebStart-可以从浏览器启动,但在浏览器外部运行
  • Microsoft ClickOnce-可以从浏览器启动,但在浏览器外部运行
  • 闪光/空气-无法逃离沙箱

  • 到目前为止,我遇到的最佳解决方案是名为的跨浏览器/跨平台插件系统。这是一个C++框架,允许您从同一个代码库中生成ActiveX和NPAPI的插件。p>
    因此,只需构建一次,使其正常工作,并将其编译为一个DLL,您可以在任何一种环境中部署:ActiveX for IE,NPAPI for everyone。

    您的标题在这里并不合适。您不应该试图“破坏”浏览器的沙盒。您应该使用适当的API向您的应用程序(JVM/java,如果您想要x-platform)授予信任