I just tested this without the timeout: 

```js
share: function shareHandler(activity) {
  var blobs = activity.source.data.blobs,
    names = activity.source.data.filenames;

  function insertAttachments() {
    window.removeEventListener('hashchange', insertAttachments);

    ThreadUI.cleanFields(true);

    blobs.forEach(function(blob, idx) {
      var attachment = new Attachment(blob, {
        name: names[idx],
        isDraft: true
      });
      Compose.append(attachment);
    });
  }

  // Navigating to the 'New Message' page is an asynchronous operation that
  // clears the Composition field. If the application is not already in the
  // 'New Message' page, delay attachment insertion until after the
  // navigation is complete.
  if (window.location.hash !== '#new') {
    window.addEventListener('hashchange', insertAttachments);
    window.location.hash = '#new';
  } else {
    insertAttachments();
  }
}
```

And it works as expected.