0

私の 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">
4

1 に答える 1

0

Neptune は、オペレーティング システムにインストールされている IE の現在のバージョンの設定を使用しているようです。私は IE8 を使用しているので、安全性設定を構成し、すべて正常に機能しました。ActiveX コンポーネントの安全性について尋ねるダイアログ ウィンドウが表示されました。ローカライズ版の IE を使用しているため、名前が間違っていたら申し訳ありません。IE でのアクションは次のとおり
です。 1. [サービス] -> [エクスプローラの設定] -> [安全性] タブを選択します。
2. 「ローカル イントラネット」を選択します。[ノード] をクリックしてから、[追加] をクリックします。追加

http://localhost

[追加]、[閉じる]、[OK] の順にクリックします。
3. 別の項目を選択...
4. 「ActiveX 要素と接続モジュール」の場合:
ActiveX 管理要素の自動要求 - オン
安全とマークされた ActiveX 要素のスクリプトを実行する -署名されて
いない ActiveX 要素の
ロード - 提案 署名された ActiveX 要素のロード - 提案
ActiveX 要素と接続モジュールを実行する - オン
安全に使用できるとマークされていない ActiveX 要素の使用 - バイナリ
コードとスクリプトのアクションを提案
する
以前は警告なし - オン
スクリプトを許可 - オン

その後、Google Chrome を再度開きました。

于 2013-05-15T20:53:55.160 に答える