First pass at wp7 support
This commit is contained in:
parent
028fdf8b31
commit
9f8af5f464
14
plugin.xml
14
plugin.xml
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
|
<plugin xmlns="http://cordova.apache.org/ns/plugins/1.0"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
id="org.apache.cordova.core.InAppBrowser"
|
id="org.apache.cordova.core.InAppBrowser"
|
||||||
version="0.1.0">
|
version="0.1.0">
|
||||||
@ -32,5 +32,17 @@ id="org.apache.cordova.core.InAppBrowser"
|
|||||||
<header-file src="src/ios/CDVInAppBrowser.h" />
|
<header-file src="src/ios/CDVInAppBrowser.h" />
|
||||||
<source-file src="src/ios/CDVInAppBrowser.m" />
|
<source-file src="src/ios/CDVInAppBrowser.m" />
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
|
<!-- wp7 -->
|
||||||
|
<platform name="wp7">
|
||||||
|
<config-file target="config.xml" parent="/*">
|
||||||
|
<feature name="InAppBrowser">
|
||||||
|
<param name="wp-package" value="InAppBrowser"/>
|
||||||
|
</feature>
|
||||||
|
</config-file>
|
||||||
|
|
||||||
|
<source-file src="src/wp7/InAppBrowser.cs" />
|
||||||
|
</platform>
|
||||||
|
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
|
268
src/wp7/InAppBrowser.cs
Normal file
268
src/wp7/InAppBrowser.cs
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Ink;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
using Microsoft.Phone.Controls;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
using WPCordovaClassLib.Cordova;
|
||||||
|
using WPCordovaClassLib.Cordova.Commands;
|
||||||
|
using WPCordovaClassLib.Cordova.JSON;
|
||||||
|
using Microsoft.Phone.Shell;
|
||||||
|
using Microsoft.Phone.Tasks;
|
||||||
|
|
||||||
|
namespace WPCordovaClassLib.Cordova.Commands
|
||||||
|
{
|
||||||
|
[DataContract]
|
||||||
|
public class BrowserOptions
|
||||||
|
{
|
||||||
|
[DataMember]
|
||||||
|
public string url;
|
||||||
|
|
||||||
|
[DataMember]
|
||||||
|
public bool isGeolocationEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InAppBrowser : BaseCommand
|
||||||
|
{
|
||||||
|
|
||||||
|
private static WebBrowser browser;
|
||||||
|
private static ApplicationBarIconButton backButton;
|
||||||
|
private static ApplicationBarIconButton fwdButton;
|
||||||
|
|
||||||
|
public void open(string options)
|
||||||
|
{
|
||||||
|
string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
|
||||||
|
//BrowserOptions opts = JSON.JsonHelper.Deserialize<BrowserOptions>(options);
|
||||||
|
string urlLoc = args[0];
|
||||||
|
string target = args[1];
|
||||||
|
/*
|
||||||
|
_self - opens in the Cordova WebView if url is in the white-list, else it opens in the InAppBrowser
|
||||||
|
_blank - always open in the InAppBrowser
|
||||||
|
_system - always open in the system web browser
|
||||||
|
*/
|
||||||
|
switch (target)
|
||||||
|
{
|
||||||
|
case "_blank":
|
||||||
|
ShowInAppBrowser(urlLoc);
|
||||||
|
break;
|
||||||
|
case "_self":
|
||||||
|
ShowCordovaBrowser(urlLoc);
|
||||||
|
break;
|
||||||
|
case "_system":
|
||||||
|
ShowSystemBrowser(urlLoc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowCordovaBrowser(string url)
|
||||||
|
{
|
||||||
|
Uri loc = new Uri(url, UriKind.RelativeOrAbsolute);
|
||||||
|
Deployment.Current.Dispatcher.BeginInvoke(() =>
|
||||||
|
{
|
||||||
|
PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
|
||||||
|
if (frame != null)
|
||||||
|
{
|
||||||
|
PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
|
||||||
|
if (page != null)
|
||||||
|
{
|
||||||
|
CordovaView cView = page.FindName("CordovaView") as CordovaView;
|
||||||
|
if (cView != null)
|
||||||
|
{
|
||||||
|
WebBrowser br = cView.Browser;
|
||||||
|
br.Navigate(loc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowSystemBrowser(string url)
|
||||||
|
{
|
||||||
|
WebBrowserTask webBrowserTask = new WebBrowserTask();
|
||||||
|
webBrowserTask.Uri = new Uri(url, UriKind.Absolute);
|
||||||
|
webBrowserTask.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Display an inderminate progress indicator
|
||||||
|
private void ShowInAppBrowser(string url)
|
||||||
|
{
|
||||||
|
Uri loc = new Uri(url);
|
||||||
|
|
||||||
|
Deployment.Current.Dispatcher.BeginInvoke(() =>
|
||||||
|
{
|
||||||
|
if (browser != null)
|
||||||
|
{
|
||||||
|
//browser.IsGeolocationEnabled = opts.isGeolocationEnabled;
|
||||||
|
browser.Navigate(loc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
|
||||||
|
if (frame != null)
|
||||||
|
{
|
||||||
|
PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
|
||||||
|
|
||||||
|
if (page != null)
|
||||||
|
{
|
||||||
|
Grid grid = page.FindName("LayoutRoot") as Grid;
|
||||||
|
if (grid != null)
|
||||||
|
{
|
||||||
|
browser = new WebBrowser();
|
||||||
|
browser.IsScriptEnabled = true;
|
||||||
|
browser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(browser_LoadCompleted);
|
||||||
|
browser.Navigating += new EventHandler<NavigatingEventArgs>(browser_Navigating);
|
||||||
|
browser.NavigationFailed += new System.Windows.Navigation.NavigationFailedEventHandler(browser_NavigationFailed);
|
||||||
|
browser.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(browser_Navigated);
|
||||||
|
|
||||||
|
browser.Navigate(loc);
|
||||||
|
//browser.IsGeolocationEnabled = opts.isGeolocationEnabled;
|
||||||
|
grid.Children.Add(browser);
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplicationBar bar = new ApplicationBar();
|
||||||
|
bar.BackgroundColor = Colors.Gray;
|
||||||
|
bar.IsMenuEnabled = false;
|
||||||
|
|
||||||
|
backButton = new ApplicationBarIconButton();
|
||||||
|
backButton.Text = "Back";
|
||||||
|
backButton.IconUri = new Uri("/Images/appbar.back.rest.png", UriKind.Relative);
|
||||||
|
backButton.Click += new EventHandler(backButton_Click);
|
||||||
|
//backButton.IsEnabled = false;
|
||||||
|
bar.Buttons.Add(backButton);
|
||||||
|
|
||||||
|
|
||||||
|
fwdButton = new ApplicationBarIconButton();
|
||||||
|
fwdButton.Text = "Forward";
|
||||||
|
fwdButton.IconUri = new Uri("/Images/appbar.next.rest.png", UriKind.Relative);
|
||||||
|
fwdButton.Click += new EventHandler(fwdButton_Click);
|
||||||
|
//fwdButton.IsEnabled = false;
|
||||||
|
bar.Buttons.Add(fwdButton);
|
||||||
|
|
||||||
|
ApplicationBarIconButton closeBtn = new ApplicationBarIconButton();
|
||||||
|
closeBtn.Text = "Close";
|
||||||
|
closeBtn.IconUri = new Uri("/Images/appbar.close.rest.png", UriKind.Relative);
|
||||||
|
closeBtn.Click += new EventHandler(closeBtn_Click);
|
||||||
|
bar.Buttons.Add(closeBtn);
|
||||||
|
|
||||||
|
page.ApplicationBar = bar;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void fwdButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (browser != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//browser.GoForward();
|
||||||
|
browser.InvokeScript("execScript", "history.forward();");
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void backButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (browser != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//browser.GoBack();
|
||||||
|
browser.InvokeScript("execScript", "history.back();");
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void closeBtn_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void close(string options = "")
|
||||||
|
{
|
||||||
|
if (browser != null)
|
||||||
|
{
|
||||||
|
Deployment.Current.Dispatcher.BeginInvoke(() =>
|
||||||
|
{
|
||||||
|
PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
|
||||||
|
if (frame != null)
|
||||||
|
{
|
||||||
|
PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
|
||||||
|
if (page != null)
|
||||||
|
{
|
||||||
|
Grid grid = page.FindName("LayoutRoot") as Grid;
|
||||||
|
if (grid != null)
|
||||||
|
{
|
||||||
|
grid.Children.Remove(browser);
|
||||||
|
}
|
||||||
|
page.ApplicationBar = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
browser = null;
|
||||||
|
string message = "{\"type\":\"exit\"}";
|
||||||
|
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
||||||
|
result.KeepCallback = false;
|
||||||
|
this.DispatchCommandResult(result);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
|
||||||
|
{
|
||||||
|
//if (browser != null)
|
||||||
|
//{
|
||||||
|
// backButton.IsEnabled = browser.CanGoBack;
|
||||||
|
// fwdButton.IsEnabled = browser.CanGoForward;
|
||||||
|
//}
|
||||||
|
string message = "{\"type\":\"loadstop\", \"url\":\"" + e.Uri.AbsoluteUri + "\"}";
|
||||||
|
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
||||||
|
result.KeepCallback = true;
|
||||||
|
this.DispatchCommandResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void browser_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
|
||||||
|
{
|
||||||
|
string message = "{\"type\":\"error\",\"url\":\"" + e.Uri.AbsoluteUri + "\"}";
|
||||||
|
PluginResult result = new PluginResult(PluginResult.Status.ERROR, message);
|
||||||
|
result.KeepCallback = true;
|
||||||
|
this.DispatchCommandResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void browser_Navigating(object sender, NavigatingEventArgs e)
|
||||||
|
{
|
||||||
|
string message = "{\"type\":\"loadstart\",\"url\":\"" + e.Uri.AbsoluteUri + "\"}";
|
||||||
|
PluginResult result = new PluginResult(PluginResult.Status.OK, message);
|
||||||
|
result.KeepCallback = true;
|
||||||
|
this.DispatchCommandResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user