私の Web アプリケーション (localhost:8083/myapp) は、サーバー側で Java を使用し、クライアント側で ExtJS 4.1.3 を使用し、ブラウザーは Google Chrome です。
Web アプリケーションのボタンをクリックして、ActiveX オブジェクトで新しいウィンドウを開きたいと思います。Google Chrome で ActiveX を有効にする
Neptune プラグイン ( http://www.meadroid.com/neptune/about.htm ) をインストールしました。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 に登録して、Google Chrome を再度開きます。 . 注: npmeadax.dll は、インストーラーによるカスタム インストール後に使用できます。
プラグインは、属性 type='application/x-meadco-neptune-ax' および属性 param-location が location.href に設定されたページに追加される埋め込みタグのみが必要です。
問題はActiveX オブジェクトは、プレーンな HTML ページを使用すると機能しますが、Web アプリケーション内で同じコードを使用すると機能しません。単純な html ページで loadPage 関数をデバッグすると、tbody.appendChild(embed) 情報バーがウィンドウの上部に表示され、次のように表示されます。オプションについては、ここをクリックしてください。ブロックされたコンテンツを許可すると、すべてが期待どおりに機能します。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">