To be approved in the iTunes Store, Apple may require that your app open web pages inside your app, instead of opening Safari externally in another app window. It provides a better experience to the user.
When you open Safari in a new app window, it’s difficult to get back to your app. By using the Safari View Controller inside your app, switching to Safari is seamless – there is even a Done button to return to your app. Your users will thank you.
There’s a handy PhoneGap plugin which makes this easy. Here’s how to use it:
1. Add the following line to your configxml in Project Properties:
<plugin name="cordova-plugin-safariviewcontroller" source="npm" />
2. Add this function to your code. If you’re working in BASIC, put JavaScript
as a statement before this code, and End JavaScript as a statement after this code.
function openURL(url, readerMode) { if (config.platform !== 'iOS') { window.open(url, '_blank'); return; } SafariViewController.isAvailable((available) => { if (available) { SafariViewController.show( { url, hidden: false, // default false animated: true, // default true enterReaderModeIfAvailable: readerMode, // default false tintColor: '#00ffff', // default is ios blue barColor: '#226134', // background color controlTintColor: '#ffffff', // tintColor }, // success handler invokes events 'opened', 'loaded' and 'closed' null, // fail handler ((msg) => { log.error(`Unable to open URL: ${msg}`); }), ); } else { // potentially powered by InAppBrowser because that (currently) clobbers window.open window.open(url, '_blank', 'location=yes'); } }); }
3. Whenever you want to open a web page, do this:
openURL("https://www.nsbasic.com")
This code will work on any platform, including Android and web apps. If you’re not running on iOS, the web page will open as before.
More: This code is based on the documentation in https://github.com/EddyVerbruggen/cordova-plugin-safariviewcontroller. There are a few additional options and features which are explained there.