0

これは、すべての Web 開発者が経験したことがあると確信している状況ですが、IE が思うように動作していません。現在の問題は、ページがアンロードされていないときにonbeforeunloadが発生することです。これについては別の質問document.write()で既に質問しており、マイクロソフトによると、問題、アンカー、およびページが「アンロード」される原因となるその他すべてのばかげたことを解決しました。つまり、私が知る限りです。イベントは、トリガーされるべきではないときにまだトリガーされています。

イベントをトリガーする原因にフラグを立てたり、トリガーを引き起こす可能性のあるものを削除したりする方法があるかどうか疑問に思っていますが、それは少しばかげています。それに対処する必要がないようにするか、イベントが発生する原因となっている可能性のあるものを回避します。

答えが単純に「いいえ」の場合、私は頭を下げてこのばかげたブラウザを回避しようとし続けますが、あきらめる前に知的な群衆の頭脳を選んでみようと思いました.

より詳しい情報

このページではjfileuploadを使用しています。これがイベントのコードです。アップロードが開始されない限り、これが発生しないように、ページの最初にbCancel設定されています。は最初に に設定されているため、アップロードをキャンセルしてもウィンドウが再び閉じられることはありません。このイベントは、ファイルがアプレットを介してアップロードを完了した直後にトリガーされます。falsecanClosetrueonbeforeunload

        document.uploader.setEnabled(true);

        function JSTransferTriggered(){
            bCancel=true;
        }

        function JSTransferDone(){
            bCancel=false;
            window.open("uploads_finished.php",'_self',null);
        }

        function JSTransferCancelled(){
            $.ajax({
               'async': false,
               'type': 'POST',
               'url': 'cancel.php'              
            });
            bCancel=false;
            if(canClose)self.close();
        }
    $(window).load(function(){  
        $(window).bind('beforeunload',function(){
            document.uploader.setEnabled(false);
            if(bCancel){
                canClose=false;
                document.uploader.cancel();
            }           
        });
    });

アップローダーは、アプレットで特定のイベントが発生したときに、JSTransfertriggeredなどと同様の他の関数を使用して呼び出します。JSTransferDoneこれらの関数は変更されておらず、log次のような関数を呼び出すだけです。

        function log() {
            var msg = Array.prototype.join.call(arguments, '');

            var match = msg.match(/^([a-zA-Z]+)\((.*)\)/);
            if (match) {
                msg = ["<span class='fname'>", match[1], '</span>',
                       "<span class='p'>(</span>",
                       match[2],
                       "<span class='p'>)</span><br>"].join('');
            }
            //msg = msg.replace(/^[a-zA-Z]+/, "<span class='fname'>$&</span>");

            var elt = document.getElementById('event_log');
            //elt.appendChild(document.createTextNode(msg + "\n"));
            elt.innerHTML += msg;
        }

リストされたすべてのトリガーのページを完全に、または完全にクリアしたと主張しているわけではありません。イベントをトリガーしているものを見つけて修正できるようにする方法を見つけようとしています。

4

0 に答える 0