diff options
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js')
| -rw-r--r-- | StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js new file mode 100644 index 00000000..1c1db69c --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js @@ -0,0 +1,80 @@ +module.exports = function (context) { + var deferred = context.requireCordovaModule('q').defer(), + fs = context.requireCordovaModule('fs'), + path = context.requireCordovaModule('path'), + projectRoot = context.opts.projectRoot; + + // While on AppBuilder this may work, the Cordova CLI doesn't like it + // (or at least not all versions of it). + var appXaml = path.join(projectRoot, "App.xaml.cs"); + var mainPageXaml = path.join(projectRoot, "MainPage.xaml.cs"); + try { + fs.statSync(appXaml); + fs.statSync(mainPageXaml); + } catch (err) { + appXaml = path.join(projectRoot, "platforms", "wp8", "App.xaml.cs"); + mainPageXaml = path.join(projectRoot, "platforms", "wp8", "MainPage.xaml.cs"); + try { + fs.statSync(appXaml); + fs.statSync(mainPageXaml); + } catch (err2) { + console.error("Custom URL Scheme plugin couldn't find your App's xaml file! Try to adjust the file manually according to the 'add-uri-mapper.js' hook."); + return; + } + } + + fs.readFile(appXaml, 'utf8', function (err,data) { + if (err) { + console.error("Error while configuring the Custom URL Scheme: " + err); + deferred.reject(err); + return; + } + + var result = data.replace(/^(\s*?)(RootFrame.NavigationFailed\s*?\+=\s*?RootFrame_NavigationFailed;)/gm, + "$1$2\n\n$1// Assign the URI-mapper class to the application frame\n$1RootFrame.UriMapper = new CompositeUriMapper();"); + + fs.writeFile(appXaml, result, 'utf8', function (err) { + if (err){ + deferred.reject(err); + } else{ + deferred.resolve(); + } + }); + }); + + fs.readFile(mainPageXaml, 'utf8', function (err,data) { + if (err) { + console.error("Error while configuring the Custom URL Scheme: " + err); + deferred.reject(err); + return; + } + + // first add a line to refer to a new method + var result = data.replace(/^(\s*?)(this.CordovaView.Loaded\s*?\+=\s*?CordovaView_Loaded;)/gm, + "$1$2\n\n$1// Wire a handler so we can check for our custom scheme\n$1this.CordovaView.Browser.LoadCompleted += CordovaBrowser_LoadCompleted;"); + + // now add that new method + result = result.replace(/^(\s*?)(\/\/ Constructor)/gm, + "$1void CordovaBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) {\n"+ + "$1\tif (CompositeUriMapper.launchUrl != null) {\n" + + "$1\t\tstring handleOpenURL = string.Format(\"(function() {{ document.addEventListener('deviceready', function() {{ if (typeof handleOpenURL === 'function') {{ handleOpenURL(\\\"{0}\\\"); }} }}); }})()\", CompositeUriMapper.launchUrl);\n" + + "$1\t\ttry {\n" + + "$1\t\t\tthis.CordovaView.CordovaBrowser.InvokeScript(\"eval\", new string[] { handleOpenURL });\n" + + "$1\t\t} catch (Exception) {}\n" + + "$1\t\tCompositeUriMapper.launchUrl = null;\n" + + "$1\t}\n" + + "$1\tthis.CordovaView.Browser.LoadCompleted -= CordovaBrowser_LoadCompleted;\n" + + "$1}\n\n" + + "$1$2"); + + fs.writeFile(mainPageXaml, result, 'utf8', function (err) { + if (err){ + deferred.reject(err); + } else{ + deferred.resolve(); + } + }); + }); + + return deferred.promise; +}
\ No newline at end of file |
