我的 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">