ionic也是支持 schema 的,能夠設置schema name,被其餘app調用打開,也一樣能夠經過這個辦法打開其餘app,通常都是使用cordova的這個插件ios
https://github.com/EddyVerbruggen/Custom-URL-schemegit
插件很好用,文檔也寫的有夠詳細,通常的時候在ionic上徹底套用便可。angularjs
可是有一種狀況下將有不一樣,就是其餘app使用shema url帶有參數,ionic app要獲取參數,而後根據參數進行後續處理的狀況。github
好比:promise
<a href="mycoolapp://somepath?foo=bar">Open my app</a>
文檔裏描述,使用app
function handleOpenURL(url) { console.log("received url: " + url); }
看上去也很簡單,可是....,這個handleOpenURL 是一個js的全局函數,也就是說沒法在ionic的ctrl,service裏直接使用。異步
鑑於此,有不少的辦法,好比,先使用 handleOpenURL 函數獲取url,而後將url存入 localStorage,而後在ionic代碼裏,好比$ionicPlatform.ready()
或 onDeviceReady()
裏觸發,localStorage裏取出url進行後續處理,貌似是個好方法,可是我通過屢次試驗,發現一個問題,js是異步執行的,將url存入 storage 並不必定總先於 取出 storage。存入是全局js函數,又沒有好辦法使用相似promise的方案,保證分別前後執行。ionic
這個時候天然會想到可否利用 事件 觸發,用這個爲線索,還真找到了一個接近完美的方案,直接看代碼:函數
寫一個module,將全局函數handleOpenUrl封裝進去,並觸發了一個rootScope的廣播url
angular.module('MyCustomUrlHandler', []) .run(['$rootScope', '$window', function($rootScope, $window) { $window.handleOpenURL = function(url) { $rootScope.$broadcast('customURL', url); }; }]);
而後在須要處理url的地方,響應這個廣播:
angular.module('MyApp', ['MyCustomUrlHandler']) .run(['$rootScope', function($rootScope) { $rootScope.$on('customURL', function(event, url) { alert('The URL is: ' + url); }); }]);
這個想法很是棒,解決了這個問題,同時也給咱們一個全局js 與 angularjs 進行通信的一個好方法。
若是有興趣,能夠回到原帖看看其餘討論,也有其餘方案,可是我的以爲這個最簡介優雅:
https://forum.ionicframework.com/t/ios-url-schema-handling/3998/16