crossapp webview 컨트롤 의 구덩이

3932 단어
CAWebView 컨트롤 은 브 라 우 저 컨트롤 로 app 에 웹 페이지 를 삽입 할 수 있 습 니 다.
사용 방법 은 CAWebView. h 안의 방법 을 볼 수 있 습 니 다.기본적으로 자주 사용 하 는 브 라 우 저 작업, 예 를 들 어 전진, 후퇴, 새로 고침, 자바 script 실행 등 이 포함 되 어 있 습 니 다.물론 CAWebView Delegate 도 있 습 니 다.
제공 하 는 네 개의 유용 한 함수.
오늘 말 한 구 덩이 는 웹 뷰 컨트롤 이 메 인 인터페이스 에 표 시 될 때 시스템 데스크 톱 보기 로 돌아 가 app 을 다시 열 면 인터페이스 가 끊 기 는 현상 이 나타 납 니 다.
물론 이것 은 안 드 로 이 드 시스템 아래 에서 발생 한 것 으로 IOS 는 모른다.
문제 분석:
    웹 뷰 컨트롤 을 추가 하지 않 으 면 app 에 카드 가 생기 지 않 고 추가 하면 나타 납 니 다.웹 뷰 가 문제 일 거 야.
시도 방법:
1. 프로그램 이 백 스테이지 에 들 어간 후에 웹 뷰 를 메 인 보기에 서 제거 하고 프로그램 을 백 스테이지 에서 복원 하여 웹 뷰 에 추 가 된 메 인 보기에 서 복원 합 니 다.
관련 함수 
AppDelegate. cpp 파일 아래 applicationDidEnterBackground () 화해시키다 applicationWillEnterForeground(),
프로그램 시작 절 차 를 모 르 면 Cocos2d - x 고급 개발 튜 토리 얼. pdf 를 보 세 요. crossapp 은 cocos2dx 에서 이 식 된 것 이기 때 문 입 니 다.
CClog 를 사용 하여 관련 정 보 를 디 버 깅 하 는 것 을 권장 합 니 다. 더 빠 른 포 지 셔 닝 문 제 를 도 울 수 있 습 니 다.
다음은 내 가 프로그램 시작 을 확인 하 는 과정 에서 추가 한 디 버 깅 정보 이다.
// This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground()
{
    CAApplication::getApplication()->stopAnimation();

	//add
	MainPageViewController *pmain = MainPageViewController::getInstance();
	if (pmain)
	{
		pmain->applicationDidEnterBackground();
	}
	

	CCLog("----applicationDidEnterBackground");

    // if you use SimpleAudioEngine, it must be pause
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}

코드 를 한 번 두 드 린 후에 일이 원 하 는 방향 으로 진 행 될 것 이 라 고 생각 했 지만 결 과 는 다시 app 을 열 고 자동 으로 종료 되 었 습 니 다.
재 분석: 웹 뷰 를 보 기 를 제거 할 수 없 으 면 나중에 삭제 하고 다음 에 들 어 온 후에 새로 만 듭 니 다.한다 면 한다, 이번 에는 기대 한 대로.
마지막 웹 페이지 를 복원 하려 면 CAWebView Delegate 클래스 를 볼 수 있 습 니 다.
일 은 예상 한 방향 으로 진행 되 고 있 지만 로 그 를 보면 알 수 있 습 니 다. applicationWillEnterForeground 와 applicationDid Finish Launcheng 이라는 두 함수 호출 은 규칙 이 없습니다.대부분의 경우 applicationDid FinishLauncheng 이라는 함 수 를 호출 하고 있 습 니 다. 하드웨어 문제 일 수 있 습 니 다.
소 부분 호출 applicationWillEnterForeground 라 는 함수 입 니 다. 그러나 이 함 수 는 호출 만 하면 블랙 스크린 상황 이 발생 할 확률 이 높 습 니 다.
계속 분석 하 시 겠 습 니까? 아니면 webview 문제 입 니까?웹 뷰 컨트롤 이 보기 전에 시작 되 었 고 시도 컨트롤 러 에 추가 되 었 습 니 다.하지만 프로그램 이 시 작 될 때 웹 뷰 를 만 드 는 것 은 문제 가 없습니다.여기까지 분석 하면 생각 이 나온다.
... 에 있다 applicationWillEnterForeground 함수 에서 타 이 머 를 시작 합 니 다.정시 2 초 후 (app 에 있 는 컨트롤 이 레이아웃 을 시작 한 후) 웹 뷰 컨트롤 을 만 들 고 시도 컨트롤 러 에 추가 합 니 다.
코드 는 다음 과 같 습 니 다:
// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground()
{
    CAApplication::getApplication()->startAnimation();

	//add
	MainPageViewController *pmain = MainPageViewController::getInstance();
	if ( pmain)
	{
		pmain->applicationWillEnterForeground();
	}
	

	CCLog("----applicationWillEnterForeground");

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
void MainPageViewController::applicationWillEnterForeground()
{
	//    WebControl
	//initWebControl();
	CAScheduler::getScheduler()->schedule(schedule_selector(MainPageViewController::web_callback) , this , 2.2 ,false , 0   );
}
void MainPageViewController::web_callback(float index)
{
	CCLog("----web_callback");
	initWebControl();
}
void MainPageViewController::initWebControl()
{
	deleteWebControl();

	CADipRect re = getView()->getBounds();
	re.size.height = re.size.height*0.9;
	pweb = CAWebView::createWithFrame( re );
	
	
	if ( !pweb )
	{
		CCLog("-----create webview error;");
		exit(0);
	}
	else
	{
		this->getView()->addSubview(pweb);
		pweb->loadURL("https://www.baidu.com/");
		CCLog("-----create webview successed;");
	}
}

코드 가 여기까지 왔 을 때 디버그 OK

좋은 웹페이지 즐겨찾기