8

14 列の JQuery Editable Datatable を持つ ASP.NET MVC ページがあります。クライアント側の計算を行い、そのテーブルのすべての行に適用するためのボタン (結果を適用しない) があります。

このボタンをクリックすると、4行ごとに計算を適用した後、この「実行中のスクリプトの停止」メッセージが表示されます。

設定を確認しました。[インターネット オプション] の [詳細設定] タブで、[スクリプトのデバッグを無効にする (Internet Explorer)] オプションがオンになっています。そして、「スクリプトエラーに関する通知を表示する」のチェックを外します。

Internet Explorer 8 を使用しています。現在、IE9 では発生しません。しかし、これはサーバーであるため、IE9 にアップグレードすることはできません。

私は調査を行い、これら2つのオプションを試しましたが、何も機能しませんでした.

例(1): http://www.codeproject.com/Tips/406739/Preventing-Stop-running-this-script-in-Browsers

例(2): http://www.picnet.com.au/blogs/guido/post/2010/03/04/how-to-prevent-stop-running-this-script-message-in-browsers/

誰もがこの問題を抱えていて、どんな提案も大歓迎です。

これは、スクリプト メッセージをスローしている実際のコードです。

for(i < iTotalRecords;i++) 
      {  

            var row = oTableAuditLines.fnGetData(i); 
            oTableAuditLines.fnUpdate("NF",i,1); 
            UndoHCPCS(row,i);
            UndoHCPCSModCodes(row,i);
            UndoLineUnitCount(row,i);
            oTableAuditLines.fnUpdate("", i, 6); //Reset Denial Reason Code
            UndoNonCoveredCharges(row,i);
            CalculateAmountPaidAtLine(row,i);
            CalculateEstimatedRecoveryAmountAtLine(row,i);
      }
      UpdateSummaryLine();
      UpdateSummaryLineReasonCode();

Example(2) のサンプル コードを参照して、次のようにコードを変更しましたが、引き続き Script メッセージが表示されます。

//この関数は、スクリプト実行メッセージを回避するためのものです

  RepeatingOperation = function(op, yieldEveryIteration) 
  {  
  var count = 0;  
  var instance = this;  
  this.step = function(args) 
  {    
  if (++count >= yieldEveryIteration) 
  {      
  count = 0;      
  setTimeout(function() { op(args); }, 1, [])      
  return;      
  }    
  op(args);  
  };
  };

  function ApplyNoFindings()
  {

    var i = 0;
    var ro = new RepeatingOperation(function() 
     {  

     var row = oTableAuditLines.fnGetData(i); 
            oTableAuditLines.fnUpdate("NF",i,1); 
            UndoHCPCS(row,i);
            UndoHCPCSModCodes(row,i);
            UndoLineUnitCount(row,i);
            oTableAuditLines.fnUpdate("", i, 6); //Reset Denial Reason Code
            UndoNonCoveredCharges(row,i);
            CalculateAmountPaidAtLine(row,i);
            CalculateEstimatedRecoveryAmountAtLine(row,i);

     if (++i < iTotalRecords) 
     { 
        ro.step(); 
     }  
     else 
     { 
        UpdateSummaryLine();
        UpdateSummaryLineReasonCode();
     }  
     }, 100);
     ro.step();

}

ここで何が間違っていますか?

4

3 に答える 3

0

HTML 5 ワーカーを検討することもできます

Web ワーカーは、ページのパフォーマンスに影響を与えずにバックグラウンドで実行される JavaScript です。HTML ページでスクリプトを実行すると、スクリプトが完了するまでページが応答しなくなります。Web ワーカーは、ページのパフォーマンスに影響を与えることなく、他のスクリプトから独立してバックグラウンドで実行される JavaScript です。

新しいワーカーの作成は簡単です。必要なのは、Worker() コンストラクターを呼び出し、ワーカー スレッドで実行するスクリプトの URI を指定し、ワーカーの Worker.onmessage プロパティを適切なイベント ハンドラー関数に設定することだけです。

var myWorker = new Worker("my_task.js");

myWorker.onmessage = function (oEvent) {
  console.log("Called back by the worker!\n");
};

または、 addEventListener() を使用できます。

var myWorker = new Worker("my_task.js");

myWorker.addEventListener("message", function (oEvent) {
  console.log("Called back by the worker!\n");
}, false);

myWorker.postMessage(""); // start the worker.

詳細については、 https ://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers を参照して ください。

于 2013-11-17T18:58:20.397 に答える