If you need to automatically/programmatically open a popup on iOS/Safari using Jquery Mobile, you will likely see your popup flash by very quickly and then close on its own. This is a huge annoyance, as there are times when an automatic popup is required, such as for on-load disclaimers, or confirmations.
The solution to this problem is out there, but hard to find: create a ‘safe’ popup open function that works in all browsers. The code for this (not mine, all credit is due to ArtenGr) can be found here. For findability, here’s a copy of the code:
/** Workaround for the jQuery Mobile popup opening bug. * @param {string} id The DOM id of the popup div. */ function popupSturdyOpen (id) { var ticksSeen = -1 var interval = setInterval (function(){ var hidden = $('#' + id + '-popup') .hasClass ('ui-popup-hidden') if (hidden || ++ticksSeen <= 0) { $('#' + id) .popup ('open') } else { if (++ticksSeen > 20) clearInterval (interval) } }, 100) } $("#indexpage") .on ("pagecreate", function () { popupSturdyOpen ('appPopup') });
This will automatically open the following popup in all major browsers:
<div data-role="page" id="indexpage"> <div data-role="popup" data-history="false" id="appPopup">test popup</div> </div>
There’s also a more recent version of the code by the same author, but in my tests, it causes the popup to briefly close and then reopen in iOS.