EXTJS_extjs での ACIVEX コントロールの使用によって発生するクラッシュ問題の解決策

WBOY
リリース: 2016-05-16 18:31:03
オリジナル
1144 人が閲覧しました
問題
私の現在のプロジェクトでは、フロントエンド部分は完全に「ワンページ」コンセプトに基づいた EXTJS を使用して構築されています。基本コンテナである HTML を除いて、すべて JS ファイルです (ページは JS ファイルによって実装されます)。ユーザーがページを切り替えると、前のページ オブジェクトを破棄し、新しいページ オブジェクトを作成して HTML で表示します。このアーキテクチャに基づいて、レポートを表示するための ActiveX コントロールも導入しました。この導入により、問題が発生します。レポート コントロールが存在するページにアクセスし、ユーザーがページを 2 回切り替える限り、IE はクラッシュし (FF にはこの問題はありません)、何度試行しても機能しなくなります。
理由
リソース解放を念頭に置いてシステムが設計されており、破棄部分は特別に処理されており、ActiveX のないページでも問題がないためです。したがって、問題は、IE が JS に含まれる ActiveX コントロールを解放することにあるはずです。結局のところ、HTML、JSP、または PHP ページで構築された従来のフロントエンドでは、ユーザーがジャンプしてページがアンロードされるとすぐに、システムが継続的な再描画を使用している間、そのページ内の ActiveX は破棄されます。 HTML ページにジャンプすると、システムは更新されず、アンロードも行われず、当然、ActiveX は破棄されず、ブラウザがクラッシュします。
解決策
原因が分かったので、解決策を考えていきます。 IE では ActiveX コントロールを破棄することはできません。自分で実行するだけです:
コードをコピー コードは次のとおりです:

// @AcitveXObjectID: 検索対象のノード範囲は、このノードから削除する ActiveX を検索するために使用されます。
//@ContianerID: 削除する ActiveX コントロールの ID。
function ActiveXKiller(AcitveXObjectID,ContianerID){
var ce=document.getElementById(ContianerID);
if (ce){
var cce=ce.children; 0;iif(cce[i].id==AcitveXObjectID){
ce.removeChild(cce[i]);
}
}
}


このメソッドは、ActiveX コントロールを強制終了するために使用されます。 原理もシンプルです。 Dom 内の指定された ActiveX ID を使用して、指定されたノード範囲 (通常は親ノードまたは ActiveX コントロールのコンテナー) 内を段階的に検索し、見つかったら手動で削除します。
このキラーを使用すると、クラッシュを避けるためにページを再描画する前に ActiveX を処理できます。
さらに、言及すべき特別な状況があります。これは、Ext.Window に ActiveX コントロールを配置するときです。 Ext.Window を閉じたときに内部の ActiveX を破棄できるようにしたい場合は、次の条件を満たす必要があります:
ActiveX のコンテナは Ext.Window 自体である必要があります。
つまり、ActiveX コントロールを Ext.Panel に配置し、それを Ext.Window に配置するとします。 Ext.Window が閉じているときに ActiveX コントロールを「一緒に」取得できるとは期待しないでください。
幸運を祈ります!
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート