Added loadStarted event.

This commit is contained in:
Rossen Hristov
2015-03-19 09:38:35 +02:00
parent 9d63a111ca
commit 0283d35a46
8 changed files with 58 additions and 18 deletions

View File

@ -34,7 +34,7 @@ export var testLoadExistingUrl = function (done) {
// <snippet module="ui/web-view" title="WebView"> // <snippet module="ui/web-view" title="WebView">
// ### Using WebView, // ### Using WebView,
// ``` JavaScript // ``` JavaScript
webView.on(webViewModule.knownEvents.finished, function (args: webViewModule.FinishedEventData) { webView.on(webViewModule.knownEvents.loadFinished, function (args: webViewModule.LoadEventData) {
var message; var message;
if (!args.error) { if (!args.error) {
message = "WebView finished loading " + args.url; message = "WebView finished loading " + args.url;
@ -60,7 +60,7 @@ export var testLoadInvalidUrl = function (done) {
var webView = <webViewModule.WebView>views[0]; var webView = <webViewModule.WebView>views[0];
var errorReceived = false; var errorReceived = false;
webView.on(webViewModule.knownEvents.finished, function (args: webViewModule.FinishedEventData) { webView.on(webViewModule.knownEvents.loadFinished, function (args: webViewModule.LoadEventData) {
if (errorReceived) { if (errorReceived) {
return; return;
} }

View File

@ -1,3 +1,8 @@
import application = require("application"); import application = require("application");
application.mainModule = "app/main-page"; application.mainModule = "app/main-page";
import trace = require("trace");
trace.enable();
trace.setCategories(trace.categories.concat(trace.categories.Debug));
application.start(); application.start();

View File

@ -48,6 +48,8 @@ export function onPageLoaded(args: observableModule.EventData) {
//viewModel.url = "sdfsdf://sdfwerfd"; //viewModel.url = "sdfsdf://sdfwerfd";
//viewModel.url = "http://www.sdfsdfsdfsdf.com/"; //viewModel.url = "http://www.sdfsdfsdfsdf.com/";
//viewModel.url = "https://api.instagram.com/oauth/authorize/?client_id=4e0171f9fcfc4015bb6300ed91fbf719&redirect_uri=http://localhost:2000/oauth&response_type=code";
backButton.isEnabled = false; backButton.isEnabled = false;
forwardButton.isEnabled = false; forwardButton.isEnabled = false;
reloadButton.isEnabled = false; reloadButton.isEnabled = false;
@ -67,7 +69,12 @@ export function onReloadButtonTap(args: observableModule.EventData) {
webView.reload(); webView.reload();
} }
export function onWebViewFinished(args: webViewModule.FinishedEventData) { export function onWebViewStartedLoading(args: webViewModule.LoadEventData) {
console.log("startedLoading: " + args.url);
}
export function onWebViewFinishedLoading(args: webViewModule.LoadEventData) {
console.log("finishedLoading: " + args.url);
backButton.isEnabled = webView.canGoBack; backButton.isEnabled = webView.canGoBack;
forwardButton.isEnabled = webView.canGoForward; forwardButton.isEnabled = webView.canGoForward;
reloadButton.isEnabled = true; reloadButton.isEnabled = true;

View File

@ -4,6 +4,6 @@
<Button text="→" col="1" tap="onForwardButtonTap" id="forwardButton"/> <Button text="→" col="1" tap="onForwardButtonTap" id="forwardButton"/>
<TextField col="2" id="urlTextField" text="{{ url }}" /> <TextField col="2" id="urlTextField" text="{{ url }}" />
<Button text="↻" col="3" tap="onReloadButtonTap" id="reloadButton"/> <Button text="↻" col="3" tap="onReloadButtonTap" id="reloadButton"/>
<WebView colSpan="4" row="2" id="webView" finished="onWebViewFinished" url="{{ url }}"/> <WebView colSpan="4" row="2" id="webView" finishedLoading="onWebViewFinishedLoading" startedLoading="onWebViewStartedLoading" url="{{ url }}"/>
</GridLayout> </GridLayout>
</Page> </Page>

View File

@ -4,7 +4,8 @@ import dependencyObservable = require("ui/core/dependency-observable");
import proxy = require("ui/core/proxy"); import proxy = require("ui/core/proxy");
export module knownEvents { export module knownEvents {
export var finished: string = "finished"; export var loadFinished: string = "loadFinished";
export var loadStarted: string = "loadStarted";
} }
var urlProperty = new dependencyObservable.Property( var urlProperty = new dependencyObservable.Property(
"url", "url",
@ -43,14 +44,14 @@ export class WebView extends view.View implements definition.WebView {
this._setValue(WebView.urlProperty, value); this._setValue(WebView.urlProperty, value);
} }
public _onFinished(url: string, error?: string) { public _onLoadFinished(url: string, error?: string) {
this._suspendLoading = true; this._suspendLoading = true;
this.url = url; this.url = url;
this._suspendLoading = false; this._suspendLoading = false;
var args = <definition.FinishedEventData>{ var args = <definition.LoadEventData>{
eventName: knownEvents.finished, eventName: knownEvents.loadFinished,
object: this, object: this,
url: url, url: url,
error: error error: error
@ -59,6 +60,17 @@ export class WebView extends view.View implements definition.WebView {
this.notify(args); this.notify(args);
} }
public _onLoadStarted(url: string) {
var args = <definition.LoadEventData>{
eventName: knownEvents.loadStarted,
object: this,
url: url,
error: undefined
};
this.notify(args);
}
public _loadUrl(url: string) { public _loadUrl(url: string) {
throw new Error("This member is abstract."); throw new Error("This member is abstract.");
} }

View File

@ -24,6 +24,7 @@ class WebViewClientClass extends android.webkit.WebViewClient {
if (this._view) { if (this._view) {
trace.write("WebViewClientClass.onPageStarted(" + url + ", " + favicon + ")", trace.categories.Debug); trace.write("WebViewClientClass.onPageStarted(" + url + ", " + favicon + ")", trace.categories.Debug);
this._view._onLoadStarted(url);
} }
} }
@ -32,7 +33,7 @@ class WebViewClientClass extends android.webkit.WebViewClient {
if (this._view) { if (this._view) {
trace.write("WebViewClientClass.onPageFinished(" + url + ")", trace.categories.Debug); trace.write("WebViewClientClass.onPageFinished(" + url + ")", trace.categories.Debug);
this._view._onFinished(url, undefined); this._view._onLoadFinished(url, undefined);
} }
} }
@ -41,7 +42,7 @@ class WebViewClientClass extends android.webkit.WebViewClient {
if (this._view) { if (this._view) {
trace.write("WebViewClientClass.onReceivedError(" + errorCode + ", " + description + ", " + failingUrl + ")", trace.categories.Debug); trace.write("WebViewClientClass.onReceivedError(" + errorCode + ", " + description + ", " + failingUrl + ")", trace.categories.Debug);
this._view._onFinished(failingUrl, description + "(" + errorCode + ")"); this._view._onLoadFinished(failingUrl, description + "(" + errorCode + ")");
} }
} }
}; };

View File

@ -11,9 +11,14 @@ declare module "ui/web-view" {
*/ */
export module knownEvents { export module knownEvents {
/** /**
* Raised when web-view is completely loaded. * Raised when the web-view has completely loaded an url.
*/ */
export var finished: string; export var loadFinished: string;
/**
* Raised when the web-view starts loading an url.
*/
export var loadStarted: string;
} }
/** /**
@ -67,13 +72,14 @@ declare module "ui/web-view" {
reload(); reload();
on(event: string, callback: (data: observable.EventData) => void); on(event: string, callback: (data: observable.EventData) => void);
on(event: "finished", callback: (args: FinishedEventData) => void); on(event: "loadFinished", callback: (args: LoadEventData) => void);
on(event: "loadStarted", callback: (args: LoadEventData) => void);
} }
/** /**
* Event data containing information for the finished event. * Event data containing information for the loading events of a WebView.
*/ */
export interface FinishedEventData extends observable.EventData { export interface LoadEventData extends observable.EventData {
/** /**
* Gets the url of the web-view. * Gets the url of the web-view.
*/ */

View File

@ -18,13 +18,22 @@ class UIWebViewDelegateImpl extends NSObject implements UIWebViewDelegate {
return this; return this;
} }
public webViewShouldStartLoadWithRequestNavigationType(webView: UIWebView, request: NSURLRequest, navigationType: number) {
if (request.URL) {
trace.write("UIWebViewDelegateClass.webViewShouldStartLoadWithRequestNavigationType(" + request.URL.absoluteString + ", " + navigationType + ")", trace.categories.Debug);
this._owner._onLoadStarted(request.URL.absoluteString);
}
return true;
}
public webViewDidStartLoad(webView: UIWebView) { public webViewDidStartLoad(webView: UIWebView) {
trace.write("UIWebViewDelegateClass.webViewDidStartLoad()", trace.categories.Debug); trace.write("UIWebViewDelegateClass.webViewDidStartLoad(" + webView.request.URL + ")", trace.categories.Debug);
} }
public webViewDidFinishLoad(webView: UIWebView) { public webViewDidFinishLoad(webView: UIWebView) {
trace.write("UIWebViewDelegateClass.webViewDidFinishLoad(" + webView.request.URL + ")", trace.categories.Debug); trace.write("UIWebViewDelegateClass.webViewDidFinishLoad(" + webView.request.URL + ")", trace.categories.Debug);
this._owner._onFinished(webView.request.URL.absoluteString); this._owner._onLoadFinished(webView.request.URL.absoluteString);
} }
public webViewDidFailLoadWithError(webView: UIWebView, error: NSError) { public webViewDidFailLoadWithError(webView: UIWebView, error: NSError) {
@ -34,7 +43,7 @@ class UIWebViewDelegateImpl extends NSObject implements UIWebViewDelegate {
} }
trace.write("UIWebViewDelegateClass.webViewDidFailLoadWithError(" + error.localizedDescription + ")", trace.categories.Debug); trace.write("UIWebViewDelegateClass.webViewDidFailLoadWithError(" + error.localizedDescription + ")", trace.categories.Debug);
this._owner._onFinished(url, error.localizedDescription); this._owner._onLoadFinished(url, error.localizedDescription);
} }
} }