###前提・実現したいこと
Chromeのアドオンで
1.画面に対してJSを実行
2.1の処理は3秒に1回行う
3.1でエラーが発生した場合は処理を中断し、エラー時用の関数を実行
という事をやろうとしています。
※実際にはもっと複雑な処理を行っているのですが
質問したい箇所とは関係ないため簡略化して書いています。
1はcontent.js、2と3はbackground.jsで行っています。
###発生している問題・エラーメッセージ
3の処理で、回数が残っていても処理を中断したいのですが、
中断されず処理が進んでしまいます。
###該当のソースコード
Javascript
1■background.js 2page_function = function(){ 3 4 error_flg = []; 5 6 for(var count = 1; count <= 5; count++){ 7 8 var timer = setTimeout(function(){ 9 10 var deferred = do_action(); 11 12 deferred.done(function(){ 13 if(error_flg[0] == true){ 14 error_action(); 15 16 return false; 17 } 18 }); 19 }.bind(null, count), count * 3000); 20 } 21} 22 23function do_action(){ 24 var deferred = new $.Deferred(); 25 26 chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 27 chrome.tabs.sendMessage(tabs[0].id, {}, function(response){ 28 29 error_flg[0] = response.error_flg 30 if(error_flg[0]){ 31 clearTimeout(timer); 32 } 33 deferred.resolve(); 34 }); 35 }); 36 37 return deferred; 38} 39 40function error_action(){ 41 chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 42 chrome.tabs.sendMessage(tabs[0].id, {}, function(response){ 43 }); 44 }); 45}
###試したこと
error_flg[0]の値がtrue(画面で実行したJSでエラーが発生)の場合、error_actionが
実行されている事は確認しています。
clearTimeout(timer)の実行をif(error_flg[0] == true)の中や
error_actionの中に変えてみても結果は変わりませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
実行環境はChrome 54.0.2840.59 mです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/17 00:31
2016/10/17 02:04
2016/10/17 02:10