chrome.extension.onMessageとsetTimeout

2013-01-30T00:00:00+00:00 Chrome Extension JavaScript

https://groups.google.com/group/chrome-api-developers-jp/browse_thread/thread/80b45919bb86f9a0 という問題があるっていうの目にしてはいたけど実際実検証とかしてなかったのでメモ

問題となる可能性があるコード (background.js)

(function(undefined) {
  chrome.extension.onMessage.addListener(function(req, sender, res) {
    setTimeout(function() {
      res({ "message": "hoge" });
    }, 10000);

    return false;
  });
})();

っていう風にブラウザアクションなどからchrome.extension.sendMessageして、バックグラウンドページでonMessageをして10秒後にレスポンスを返すような事をすると

Could not send response: The chrome.extension.onMessage listener must return true if you want to send a response after the listener returns

っていう風にエラーになる。まぁ書いてある通りにtrueを返せば良いらしい。でMLでも言われてると思うんですが

true以外を返すとPort(メッセージポート)がonMessage処理が終わると開放される為、メッセージ元に何かを返却するような場合だとPortが既に開放されているのでエラーになるっていう感じかと

んまぁまずsetTimeoutして何かするっていうケースになった事無いけど、そういうのがあるっていうのだけでも知識として持っといた方が良いっすねって事で

Tracing JMX gradleのJavaExec