用Javascript打开Microsoft Word的一个实例

3
我正在构建一个应用程序,允许用户通过网页打开Word文档。这个Web应用程序将使用本地计算机上的Word实例打开Word文档。
我有两种解决方案:
1. 使用ActiveX(仅限于IE) 2. 由于应用程序是内部网络应用程序,我在Web服务中使用PsTools远程打开远程计算机上的Word实例。
目前我正在遵循第二种架构。它基于一个Web服务,通过Javascript/jquery调用接收机器名称。稍后在Web方法中,我使用PsTools在远程计算机上远程执行MS Word实例。
这两种架构都可以工作,但它们都有局限性。使用ActiveX只能在IE上使用,并且还需要更改网络策略以允许ActiveX。使用PsTools非常好用,但我无法获取Word.Exe的路径,我只能假设它总是位于\\machinename\C$\Program Files(x86)\....
我们可能也会将此应用程序公开,如果这样的话,我们使用PsTools的解决方案将不再适用。

我想知道是否有其他更适合/跨浏览器的方式通过 Web 应用程序打开本地 Word 实例?

文档必须在远程位置进行修改,一种选择是让用户下载文档,然后修改并将其上传到服务器,但我们正在替换一个厚客户端,并希望保持用户体验相同,因此这个选项不可行。


9
你能否提供下载 Word 文件的链接?大多数电脑下载后都会自动打开 Word 文档。 - Alex
@Jaco,我在问题中漏掉了一些内容,文档位于远程驱动器上,必须在那里进行修改。因此,要下载它,然后进行修改,再上传会对用户来说很复杂,我们无法这样做。 - CriketerOnSO
这将是一个非常不同的解决方案,但我会使用微软的Office.js:链接 - guysigner
5
为什么不直接提供共享驱动器上文档的链接?此外,你不能指望每个人都拥有 MS Office 的副本。将其作为应用程序的一部分功能的依赖是一个非常糟糕的想法——特别是因为你提到可能会将其公开化。 - Korgrue
1
必须用Word吗?与Google文档相比,这不是一个非常适合网络的方法。 - charlietfl
1
一个会自动打开 Word 并加载一些随机文件的网站?!看起来像是一个等待发生安全问题的漏洞。 - Matt Burland
2个回答

7

我正在开发一个应用程序,允许用户通过网页打开Word文档。

如果是内部网络场景,您可以使用Office URI方案的应用程序协议来链接到文档,这样文档将在本地安装的客户端中打开。

Office URI模式如下:

<scheme-name>:<command-name>"|"<command-argument-descriptor> "|"<command-argument>

对于Word来说,一个示例是:
<a href='ms-word:ofe|u|https://example.com/example.docx'>Edit</a>

其中,ms-word: 是方案,ofe 命令代表打开以进行编辑u 是命令描述符,用于使用之后的 URI,最后是文档本身的 URI。还有其他命令,如ofv (打开以进行查看),nft (新建模板),以及其他命令描述符,如s 代表保存

这里是完整的参考:https://msdn.microsoft.com/en-us/library/office/dn906146.aspx

当安装 Office 客户端时,协议会在 Windows 中注册。

您可以轻松在 IIS 服务器上启用 WebDAV。WebDAV 客户端已经内置在客户端的 Windows 中。

您还可以使用组件,如FFWinPlugin插件,它是SharePoint Foundation的一部分,或者OpenDocuments控件,它是随Office客户端一起安装的ActiveX控件。

我们可能也会将此应用程序公开

我建议您不要这样做,除非您的公司拥有或处理类似于OneDriveOffice.com的服务。这很容易变得棘手,正如其他答案中所提到的那样。此外,向普通公众强制推广专有客户端也不是一个好主意。而且,即使是Microsoft自己的解决方案在各种浏览器上的可靠性也无法保证,只有IE才能最好地工作(即使Edge也存在问题),这将向普通公众强制推广特定浏览器。这不是一个好主意。

但是,如果您确实需要,那么最好使用已经围绕WebDAV构建的一些解决方案。 Alfresco ECM(企业内容管理)是使用WebDAV类似于您的用例的公共提供的一个示例。

还有一个由IT Hit提供的,这里有一个实时演示: http://www.ajaxbrowser.com。他们还有一个基本教程,介绍如何设置自己的WebDAV服务器,与您的用例相同。您需要找到他们的文档。


我正在尝试在我的本地ASP.NETCore项目中使它工作。如果我将它添加到根文件夹,Word只会打开一个空白文档,任何文件都没有?我正在使用Word 19。有什么想法吗? - aryeh

1
当你说:“我们也可能将这个应用程序公开”,你指的是什么规模?只是来自团队的几个人,还是一个需要处理编辑冲突、事务、锁定、性能等真正的Web应用程序?即使是你提到的内部解决方案,一旦2-3个人开始编辑同一份文档,它也很可能会成为一个头疼的问题。
对于这种类型的文档共享,你基本上有两个选择:
1.在富Web UI方面进行大量投资,其行为类似于MS Word,并提供后端服务,将信息存储在可扩展的数据存储中,并提供同时编辑和文档下载;或者
2.与第三方供应商API或白标提供商集成,提供类似的功能以换取费用。例如Box.com APIsHyperOfficeFirePad等。
这个问题很容易解决,只要将相关文档转换成表单类型就行了。有许多服务提供嵌入式表单功能,并具备优秀的报告和数据库管理功能。如果需要Word格式的文档,则您的应用程序只需将存储的数据转换为.doc/.docx文档,供用户随意下载。
不管您选择哪种方案,请尽量避免使用基于PsTools的当前设置。正如@Matt-Burland所提到的那样,这很可能会很快引起安全灾难,就像一个脆弱的纸牌屋一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接