1

いくつかの段落をdivに追加するこのWebワーカーがあり、このようなものです

var worker1 = new Worker('many.js');
var worker2 = new Worker('many.js');
var worker3 = new Worker('many.js');
var worker4 = new Worker('many.js');

      worker1.onmessage = function (event) {
      function xx(){$(event.data).appendTo('#div_1');}
      setInterval(xx,4000);
      }; 

      worker2.onmessage = function (event) {
      function xx(){$(event.data).appendTo('#div_2');}
      setInterval(xx,4400);
      };


      function killworker(){
      worker1.terminate();
      }

これは many.js ファイルです

function j()
{return "<p>lorem ispum</p>"}

postMessage(j());

このようにワーカーを破壊することができます

worker1.terminate();

しかし、それを関数にラップして、ボタンからのクリックイベントに続いて終了させたいと思っていました

<button onClick="javascript:killworker();">stop worker</button>

私のコードはワーカーを終了していないようです.なぜ機能しないのですか?.

4

2 に答える 2

0

あなたのkillworker機能はより広い文脈で定義されていますか? はいの場合、それはあなたの問題です。関数を任意のスコープからアクセスできるグローバル関数として明示的に定義するwindow.killworker = function() { }代わりに試してください。function killworkers() {}

于 2013-05-14T15:44:37.767 に答える
0

最初にclearIntervalが必要でした

私のコードは次のようになります

var worker1 = new Worker('many.js');
var worker2 = new Worker('many.js');
var worker3 = new Worker('many.js');
var worker4 = new Worker('many.js');

      var timer = 0;

      worker1.onmessage = function (event) {
      function xx(){$(event.data).appendTo('#div_1');}
      timer = setInterval(xx,2000);
      }; 

       function killworker(){
       clearInterval(timer);
      worker1.terminate();
      }

      worker2.onmessage = function (event) {
      function xx(){$(event.data).appendTo('#div_2');}
      setInterval(xx,2200);
      };

マイボタン<button onclick="killworker()">stop worker</button>

于 2013-05-14T16:17:18.820 に答える