Skip to main content
Newcomer
September 18, 2026
Question

Embedded signing: Print button in the Electronic Record and Signature Disclosure dialog is a no-op — ds-signing-document iframe sandbox is missing allow-modals

  • September 18, 2026
  • 0 replies
  • 7 views

Summary
-------
When a signing session is embedded with docusign.js, the "Electronic Record and
Signature Disclosure" dialog's Print button does nothing. Download in the same
dialog works. The browser blocks the print call because the iframe that renders
the signing document is sandboxed without allow-modals.

Environment
-----------
- docusign.js v0.0.61 (js.docusign.com/bundle.js and js-d.docusign.com/bundle.js)
- Embedded wrapper: @embedded/signing-ui 1.0.208
- Classic view and displayFormat: "focused" both affected
- Chrome 152 on macOS (also reproduced on Chromium 147)
- Reproduced on demo; the identical iframe sandbox attribute ships in the production bundle, so production is affected too

Steps to reproduce
------------------
1. Create an envelope with an embedded signer (clientUserId set).
2. Create a recipient view with frameAncestors/messageOrigins for the host page.
3. Mount it: DocuSign.loadDocuSign(apiKey).then(ds =>
   ds.signing({ url }).mount('#container')).
4. In the consent dialog, click "Electronic Record and Signature Disclosure".
5. Click Print.

Expected: the browser print dialog opens (as it does when the same signing URL
is opened in a top-level tab).
Actual: nothing happens. Chrome logs:

  Ignored call to 'print()'. The document is sandboxed, and the 'allow-modals'
  keyword is not set.


What I found
------------
The frame chain is:

1. docusign.js creates js-library-iframe-<id> -> apps.docusign.com/embedded-signing
   with sandbox "allow-downloads allow-forms allow-popups
   allow-popups-to-escape-sandbox allow-scripts allow-modals allow-same-origin"
   -- allow-modals IS present here (applySandboxPermissions in bundle.js).

2. Inside that wrapper, @embedded/signing-ui renders the signing document frame:

   <iframe id="ds-signing-document"
     sandbox="allow-downloads allow-forms allow-popups
              allow-popups-to-escape-sandbox allow-scripts allow-same-origin">

   -- allow-modals is NOT in that list. It is a hardcoded literal in
   docucdn-a.akamaihd.net/production/1ds/widgets/@embedded/signing-ui/1.0.208/js/1ds-bundle.js

3. Print renders the disclosure into an about:srcdoc iframe, which inherits the
   sandbox flags from (2), and calls window.print() -- which Chrome ignores.

Download still works because allow-downloads survived; only the modal-gated
print() is affected.

Where it happens
----------------
- docusign.js, classic view:                       Print blocked
- docusign.js, displayFormat "focused":            Print blocked
- Plain <iframe src="{recipientViewUrl}"> (no SDK): Print works
- Recipient view URL opened top-level:              Print works

So it is specific to the docusign.js embedded wrapper, not to iframes generally
or to any sandbox we set -- the host page has no control over the sandbox
attribute on ds-signing-document, since it is set cross-origin by
@embedded/signing-ui.


Question
--------
Is adding allow-modals to the ds-signing-document iframe something that can be
tracked as a fix? And in the meantime, is there a supported way to keep the
Print button functional for embedded signers (other than suppressing the
disclosure with useDisclosure: false, or dropping docusign.js for a direct
iframe, both of which have significant trade-offs for us)?