Xamarin.Mac WebView 완전히 페이지가 로드된 것 확인하기

앞서 Xamarin.Mac WebView FinishedLoad 이벤트의 오해와 진실에서 이 이벤트가 우리가 예상한대로 작동하지 않는다는 것을 확인하였다.

그렇다면 어떻게 해야할까?

로드 요청할 때 카운트를 1 올리고, 로드가 끝나거나 에러가 발생할 때 카운트를 1 내리면서, 카운트가 0이 되면, 완전히 페이지 로드가 끝난 것으로 판단하는 것이다. 지금까지는 이 방법이 최선인 것 같다. 더 좋은 방법을 찾으면 알려주시기 바란다.

아래 코드를 보자

int requestCount = 0;

MyWebView.CommitedLoad += (sender, e) =>
{
	requestCount++;

	var url = e.ForFrame.DataSource.Request.Url;
	Debug.WriteLine("RequestCount:" + requestCount + ", CommitedLoad:" + url);
};

MyWebView.FailedLoadWithError += (sender, e) =>
{
	requestCount--;

	var url = e.ForFrame.DataSource.Request.Url;
	Debug.WriteLine("RequestCount:" + requestCount + ", FailedLoadWithError:" + url);

	if (requestCount == 0)
	{
		// 최종 실패 확정
		Debug.WriteLine("Failed.");
	}
};

MyWebView.FinishedLoad += (sender, e) =>
{
	requestCount--;

	var url = e.ForFrame.DataSource.Request.Url;
	Debug.WriteLine("RequestCount:" + requestCount + ", FinishedLoad:" + url);

	if (requestCount == 0)
	{
		// 최종 성공 확정
		Debug.WriteLine("Success.");
	}
};

실제로 실행해보면, 다음과 같은 출력을 확인할 수 있다.

RequestCount:1, CommitedLoad:http://www.naver.com/
RequestCount:2, CommitedLoad:about:blank
RequestCount:1, FinishedLoad:about:blank
RequestCount:2, CommitedLoad:about:blank
RequestCount:1, FinishedLoad:about:blank
RequestCount:2, CommitedLoad:about:blank
RequestCount:1, FinishedLoad:about:blank
RequestCount:2, CommitedLoad:http://nv1.veta.naver.com/dr?unit=002AN&tbsz=2&nrefreshx=0
RequestCount:3, CommitedLoad:http://nv1.veta.naver.com/dr?unit=002AU&nrefreshx=0
RequestCount:4, CommitedLoad:http://nv.veta.naver.com/dr?unit=002AT&da_dom_id=veta_timesquare
RequestCount:3, FinishedLoad:http://nv.veta.naver.com/dr?unit=002AT&da_dom_id=veta_timesquare
RequestCount:4, CommitedLoad:http://nv2.veta.naver.com/dr?unit=002AP&nrefreshx=0
RequestCount:5, CommitedLoad:http://castbox.shopping.naver.com/sbox/main.nhn
RequestCount:4, FinishedLoad:http://nv2.veta.naver.com/dr?unit=002AP&nrefreshx=0
RequestCount:3, FinishedLoad:http://nv1.veta.naver.com/dr?unit=002AU&nrefreshx=0
RequestCount:2, FinishedLoad:http://nv1.veta.naver.com/dr?unit=002AN&tbsz=2&nrefreshx=0
RequestCount:1, FinishedLoad:http://castbox.shopping.naver.com/sbox/main.nhn
RequestCount:0, FinishedLoad:http://www.naver.com/
Success.

그럼 즐거운 Xamarin.Mac 코딩되시길...