繁体   English   中英

ActiveX在带有Neptune插件的Chrome的ExtJs应用程序中不起作用

[英]ActiveX doesn't work in ExtJs application in Chrome with Neptune plugin

我的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注册并重新打开Goog​​le Chrome 。 注意 :使用安装程序自定义安装后,可以使用npmeadax.dll。
插件只需要将embed标签添加到属性类型为'application / x-meadco-neptune-ax'且属性param-location设置为location.href的页面。
问题是当我使用纯HTML页面时ActiveX对象可以工作,但是当我在Web应用程序中使用相同的代码时就不能工作。 当我调试loadPage函数时,在纯HTML页面中,tbody.appendChild(embed)信息栏出现在窗口顶部并显示:“为了保护您的安全,Internet Explorer限制了此文件显示可访问您内容的活动内容电脑。单击此处获取选项。” 我允许被阻止的内容,所有内容均按预期工作:单词文件以字符串“ 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");        
}
...  

更新:
在纯html页面中,在javascript中添加的embed标签看起来像:

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

在网络应用程序中,embed标签看起来像:

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

看来Neptune使用的是IE的当前版本的设置,该版本已安装在操作系统中。 我使用IE8,所以我配置了安全设置,并且一切正常-我得到一个对话框,询问ActiveX组件的安全性。 我有IE的本地化版本,所以如果命名错误,将感到抱歉。 这是IE中的操作:
1.选择服务->资源管理器设置->选项卡“安全”。
2.选择“本地Intranet”。 单击节点,然后单击其他。

http://localhost

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM