IE11で「You cannot call kintone.app.record.get() in handler or during processing a handler」が発生する

下記のような処理を組んでいます

  1. サブテーブル内のチェックボックスがクリックされた際changeイベントを発火
  2. 同一行のフィールドAへ値をセット
  3. ファイルチューザーを起動
  4. ファイル選択完了後に同一行の文字列フィールドBに値をセットする

コードは下記の通りです。

kintone.events.on(changeEvents, function(event){
  〜フィールドAへのセット処理〜
  binding(X, Y);
  return event;
});

function binding(X, Y){
 〜ファイルチューザー用のinputタグ(id=st_inputImage)埋め込み〜
$('#st_inputImage').on('change', function(e){
〜選択されたファイルに関する処理〜
setResult(X, Y)
});

 $('#st_inputImage').trigger('click'); //ファイルチューザー起動
}

function setResult(X, Y){
  let recordWrap = kintone.app.record.get();
  let record = recordWrap.record;
  record[サブテーブル名].value.forEach(row=>{
    if(row.value[フィールドX].value === Y){
      row.value[フィールドB].value = '値';
    }
  });
  kintone.app.record.set(recordWrap);
}

Chrome, firefox, safari, edgeでは問題なく動作しますが、IE11でのみファイル選択後のタイミングで「You cannot call kintone.app.record.get() in handler or during processing a handler」が発生します。

 

どなたか解決策ご存知でしたらご教示頂けますと幸いです。

よろしくお願いいたします。

IE では、アロー関数が未サポートです。

ただアロー関数のエラーは、構文エラーになるので、kintone.app.record.get(); がエラーになる原因は分かりません。

とりあえず、アロー関数を無名関数に書き直してみてはいかがですか?

 

rex0220様

 

ご返信ありがとうございます。

説明不足で申し訳ありません、実際には上記コードをbabel変換し実行しております。

アロー関数が問題ないとすると、kintone.app.record.get(); の実行タイミングですか。

よくある kintone.app.record.get(); のエラーとしては、kintone イベント処理中に実行されたときですね。

$(‘#st_inputImage’).trigger(‘click’); で、起動されたときに、イベント処理中だとエラーになるのか?ブラウザーによって挙動が異なるのか?

試しに、kintone.app.record.get(); とreturn event; にデバッガーでブレークポイントを設定して、どちらが先に動くか確認してみてください。

 

 

ご返信ありがとうございます。

 

>試しに、kintone.app.record.get(); とreturn event; にデバッガーでブレークポイントを設定して、どちらが先に動くか確認してみてください。

確認してみました。

 

Chrome:

  1. $(‘#st_inputImage’).trigger(‘click’)
  2. チューザー起動(このときにretuen eventの実行待ち)
  3. ファイル選択
  4. return event
  5. kintone.app.record.get()

 

IE11:

  1. $(‘#st_inputImage’).trigger(‘click’)
  2. チューザー起動
  3. ファイル選択
  4. kintone.app.record.get()
  5. return event

 

ブラウザによってJavascriptの処理順序が変わるのですね、、

根本解決には至っておりませんが、引き続き試行錯誤してみます。

やっぱり、実行順序が異なるんですね。

暫定対応としては、setTimeout で少しkintone.app.record.get() を遅らせてやればいかがですか?

setTimeoutを使用するか、IE11ではそもそも使用できないようにしようと思います。

ご丁寧にありがとうございました。