 <p>This code solves the problem you are talking about (specifically for issues with Chrome ios not liking "pop ups"), but in reference to Paypal Adaptive Payments where it opens a "pop up" and redirects to Paypal page for payment.</p> <p>The key is that you have to:</p> <ol> <li>Initiate the window.open directly from a button/link click</li> <li>You must use the _blank as the window "name" (and not choose your own)</li> </ol> <p>The main thing you want/need is:</p> <pre><code>var win; //VERY IMPORTANT - You must use '_blank' and NOT name the window if you want it to work with chrome ios on iphone //See this bug report from google explaining the issue: https://code.google.com/p/chromium/issues/detail?id=136610 win = window.open(paypalURL,'_blank'); //Initiate returnFromPayPal function if the pop up window is closed if (win &amp;&amp; win.closed) { returnFromPayPal(); } </code></pre> <p>Here is the full code that you can follow (ignore anything that doesn't apply to what you are doing).</p> <pre><code>&lt;div&gt; &lt;?php $payUrl = 'https://www.paypal.com/webapps/adaptivepayment/flow/pay?expType=mini&amp;paykey=' . $payKey ?&gt; &lt;button onclick="loadPayPalPage('&lt;?php echo $payUrl; ?&gt;')" title="Pay online with PayPal"&gt;PayPal&lt;/button&gt; &lt;/div&gt; &lt;script&gt; function loadPayPalPage(paypalURL) { var ua = navigator.userAgent; var pollingInterval = 0; var win; // mobile device if (ua.match(/iPhone|iPod|Android|Blackberry.*WebKit/i)) { //VERY IMPORTANT - You must use '_blank' and NOT name the window if you want it to work with chrome ios on iphone //See this bug report from google explaining the issue: https://code.google.com/p/chromium/issues/detail?id=136610 win = window.open(paypalURL,'_blank'); pollingInterval = setInterval(function() { if (win &amp;&amp; win.closed) { clearInterval(pollingInterval); returnFromPayPal(); } } , 1000); } else { //Desktop device var width = 400, height = 550, left, top; if (window.outerWidth) { left = Math.round((window.outerWidth - width) / 2) + window.screenX; top = Math.round((window.outerHeight - height) / 2) + window.screenY; } else if (window.screen.width) { left = Math.round((window.screen.width - width) / 2); top = Math.round((window.screen.height - height) / 2); } //VERY IMPORTANT - You must use '_blank' and NOT name the window if you want it to work with chrome ios on iphone //See this bug report from google explaining the issue: https://code.google.com/p/chromium/issues/detail?id=136610 win = window.open(paypalURL,'_blank','top=' + top + ', left=' + left + ', width=' + width + ', height=' + height + ', location=0, status=0, toolbar=0, menubar=0, resizable=0, scrollbars=1'); pollingInterval = setInterval(function() { if (win &amp;&amp; win.closed) { clearInterval(pollingInterval); returnFromPayPal(); } } , 1000); } } var returnFromPayPal = function() { location.replace("www.yourdomain.com/paypalStatusCheck.php"); // Here you would need to pass on the payKey to your server side handle (use session variable) to call the PaymentDetails API to make sure Payment has been successful // based on the payment status- redirect to your success or cancel/failed page } &lt;/script&gt; </code></pre>