0

我的 Web 应用程序(localhost:8083/myapp)在服务器端使用 Java,在客户端使用 ExtJS 4.1.3,浏览器 Google Chrome。
通过单击我的 Web 应用程序中的按钮,我想用 ActiveX 对象打开新窗口。
我安装了 Neptune 插件 ( http://www.meadroid.com/neptune/about.htm ),它可以在 Google Chrome 中启用 ActiveX。我不能使用像 IETab 这样的 Chrome 扩展,因为它们会破坏我的标记,而且我不想在 IE 下加载整个应用程序。
手动安装插件:将npmeadax.dll复制到C:\Documents and Settings\User_name\Local Settings\Application Data\Google\Chrome\User Data\Default\Plugin Data,用regsvr32.exe npmeadax.dll注册并重新打开谷歌浏览器. 注意:npmadax.dll 在使用安装程序进行自定义安装后可用。
插件只需要将嵌入标签添加到属性 type='application/x-meadco-neptune-ax' 且属性 param-location 设置为 location.href 的页面。
问题是ActiveX 对象在我使用纯 html 页面时有效,但在我在 Web 应用程序中使用相同代码时无效。在纯 html 页面中,当我调试 loadPage 函数时,在 tbody.appendChild(embed) 信息栏出现在窗口顶部并说:“为了帮助保护您的安全,Internet Explorer 已限制此文件显示可以访问您的活动内容计算机。单击此处查看选项。” 我允许被阻止的内容,一切都按预期工作:word 文件以字符串“Hello world!”打开 添加。但是在 web 应用程序中 activeX 没有被激活。/myapp//js/app/controller/somepackage/embed.html 与 C:\embed.html 相同
这是纯 html 页面的代码:
C:\button.html

<html>
<head>
</head>

<body>
    <input type="button" value="open win" onclick="window.open('embed.html','_blank')" />
</body>
</html>

C:\embed.html

<html>
<head>
    <script type="text/javascript">
        function loadPage() {
            var lh = location.href;
            var embed = document.createElement('embed');
            embed.setAttribute('width','100%');
            embed.setAttribute('height','100%');
            embed.setAttribute('type','application/x-meadco-neptune-ax');
            embed.setAttribute('param-location',lh);
            var tbody = document.getElementsByTagName('body')[0];
            tbody.appendChild(embed);                
            try {
                var w = new ActiveXObject('Word.Application');
                var docText;
                var obj;
                if (w != null)
                {
                    w.Visible = true; //set to false to stop the Word document from opening
                    obj = w.Documents.Open("C:\\A.doc");
                    docText = obj.Content;
                    w.Selection.TypeText("Hello world!");
                    w.Documents.Save();
                }
            }
            catch(e) {}
        }
    </script>
</head>

<body onload="loadPage()">
</body>
</html>

这是 Web 应用程序中的代码:
SomeForm.js(ExtJs 控制器):

Ext.define("App.controller.somepackage.SomeForm", {
extend : 'Ext.app.Controller',
...
init: function() {
    this.application.on('click_button', this.onButtonClick, this);
    ...
},      
onButtonClick: function() {
    var win = window.open("/myapp//js/app/controller/somepackage/embed.html","_blank");        
}
...  

更新:
在 javascript 中添加的普通 html 页面嵌入标签看起来像:

<embed width="100%" height="100%" type="application/x-meadco-neptune-ax" param-location="file:///C:/embed.html">

在 web-application 嵌入标签看起来像:

<embed width="100%" height="100%" type="application/x-meadco-neptune-ax" param-location="http://localhost:8083/myapp//js/app/controller/somepackage/embed.html">
4

1 回答 1

0

Neptune 似乎使用了安装在操作系统中的当前版本 IE 的设置。我使用 IE8,所以我配置了安全设置,一切正常 - 我有一个对话框窗口询问 ActiveX 组件的安全性。我有一个本地化版本的 IE,所以如果我命名错误,我很抱歉。以下是 IE 中的操作:
1. 选择服务 -> 资源管理器设置 -> 选项卡“安全”。
2. 选择“本地内网”。单击节点,然后单击附加。添加

http://localhost

单击添加、关闭,然后单击 ОК。
3. 选择另一个...
4. 对于“ActiveX 元素和连接模块”:
ActiveX 管理元素的自动请求 - 关于
运行标记为安全的 ActiveX 元素的脚本 - 关于
加载未签名的 ActiveX 元素 - 建议
加载签名的 ActiveX 元素 - 建议
运行 ActiveX 元素和连接模块 - on
使用未标记为可安全使用的 ActiveX 元素 - 建议
二进制代码和脚本的操作 - on
允许使用 ActiveX 而无需仅对断言域提出请求 - off
允许运行未使用的 ActiveX 管理元素以前没有警告 - 打开
允许脚本 - 打开

之后我重新打开了谷歌浏览器。

于 2013-05-15T20:53:55.160 回答