While you should be loading embedded forms from your Marketo LP domain, it turns out just changing the URL is not enough.
Using a non-Marketo-owned domain to load forms2.min.js and call show up on the page if you do that. seems to avoid collateral damage from Tracking Protection (Firefox’s built-in feature or the equivalent plugin for another browser). The form will at least
First, download this file:
(Note: the Marketo Nation site gates files through an “Offsite Link” popup. So click above, then right-click the link + Save Link As. Make sure you get the .html file itself, and don’t end up with a snapshot of this blog post!)
Next, upload the file to your Design Studio. To be clear, you’re not creating an LP, you’re uploading the file as static HTML. This may not be something you’ve done before (you probably upload images, CSS, and PDFs) but Marketo actually supports any kind of file.
Screenshot after it’s been uploaded to Design Studio:
Then replace your embed code with this ever-so-slightly different version:
formXDPath : "/rs/123-ABC-456/images/marketo-xdframe-relative.html"
MktoForms2.loadForm("//pages.example.com", "123-ABC-456", 9999);
- represents your Munchkin ID
- represents your Marketo LP domain
- is o’course your form ID
A live demo (though all the code is above):
Using your LP domain enables forms to show up. But there’s a special asset, only used upon submission, that will still be blocked by default. Naturally, this only reveals itself when you run end-to-end tests.
See, embedded forms use an IFRAME message relay (XDFrame) for cross-domain posts (there are other ways to do it, but they’re not as backward-compatible and the IFRAME method works fine + fast in all browsers, even back to IE8).
But the IFRAMEd document loads forms2.min.js from an absolute URL with your instance hostname, i.e. app-xxnn.marketo.com:
Oops! Tracking Protection ain’t gonna let that load, for the same reason it doesn’t like a Marketo domain in the main document. (You can’t avoid TP by using an IFRAME, that would be silly.) As you can see, the replacement XDFrame file uses a relative URL (), so it loads from your Marketo LP domain like the rest of the assets. Presto! No marketo.com for TP to get all paranoid about.
forms2.min.js inside the IFRAME is only necessary because of its bundled jQuery library, specifically the
wrapper method. While not technically necessary, using jQuery keeps parity with the Forms 2.0 API.