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 코딩되시길...