2011-08-10 4 views
0

그래서이 프로젝트에는 여러 개의 SWF가 있으며 이러한 SWF 중 하나의 인스턴스 만로드 할 수있는 방법을 찾아야합니다.단일 SWF 응용 프로그램 인스턴스입니다. AS3

예를 들어 두 개의 다른 브라우저 또는 동일한 컴퓨터의 탭에서 동시에 두 개의 다른 응용 프로그램 SWF를 열 수 없습니다.

의 LocalConnection 그러나, 우리는 IE9가 특별히 즉시 SWF를 파괴 할 것 같다 인터넷 익스플로러 9

private var lc:LocalConnection = new LocalConnection() 

try 
{ 
     lc.connect ("Main"); 
     //continue 
} 
catch (e:Error) 
{ 
     //swf exists. 
} 

에 문제가 발생하는,이 문제에 대한 최선의 해결책이 될 것 같았다. 페이지를 새로 고침하면 "Swf Exists"가 표시 될 수 있으며 몇 초 후에 새로 고침하면 문제가 해결됩니다.

왜 이런 일이 발생하는지 알고 있습니까?

그런데 실패했습니다. Exit 이벤트가 있는지 아는 사람이 있습니까? 예를 들어 SWF가 종료되면 해당 이벤트를 catch하고 종료 전에 로컬 연결을 수동으로 닫을 수 있습니까?

onApplicationExit(e:Event): void 
{ 
    lc.close(); 
} 

마지막으로 단일 swf 인스턴스를 구현하는 데 사용할 수있는 다른 방법이 있습니까?

답변

1

하나의 SWF가 이미 열려 있는지 여부에 관계없이 SharedObject를 사용하여 플래그를 저장할 수 있습니다. 플래그가 true로 설정된 경우 시작시 두 번째 swf를 닫습니다.

첫 번째 SWF가 닫힐 때 플래그를 다시 설정하십시오. LocalConnection보다 처리하기가 더 쉽습니다. SharedObjects를 사용자가 설정 할 수있는 수명이 없기 때문에

는, 어쩌면 당신은 시간 제한의 일종으로 일할 수 :

편집

은 코멘트에서 내 물건을 추가에 대한 고유 ID를 만들려면 SWF를 만들고 5 초마다 ID와 시간 코드를 SharedObject에 씁니다. SWF가 열릴 때마다 ID를 비교하고 시간 코드가 5-10 초보다 오래되었는지 확인합니다. 그렇다면 공유 객체를 덮어 쓰지 않으면 닫습니다. 그런 것 ...

+0

감사합니다. Pkyeck. 그러나 그것은 또한 어떤 종류의 Stage로 종기가 아닙니다. 이벤트를 종료 하시겠습니까? 사용자가 브라우저를 닫을 때 공유 객체에서 플래그를 재설정 할 방법이 없으므로?(즉, LocalConnection을 닫는 방법은 없습니다). – Clark

+0

음, 네 말이 맞아. IE의 내용이 다른 문제라고 생각했습니다. 어쩌면 당신은 일종의 타임 아웃으로 작업 할 수 있습니다 : SWF에 대한 고유 ID를 생성하고 5 초마다 ID와 타임 코드를 SharedObject에 씁니다. SWF가 열릴 때마다 ID를 비교하고 시간 코드가 5-10 초보다 오래되었는지 확인합니다. 그렇다면 공유 객체를 덮어 쓰지 않으면 닫습니다. 그런 것 ... – pkyeck

0

플래시로 페이지 닫기 이벤트를 잡는 직접적인 방법은 없지만, 자바 스크립트는 방법을 제공합니다. 다음과 같은 것을 시도해 보겠습니다.

자바 스크립트 리스너를 웹 페이지에 추가하고 플래시 무비에서 정리 기능을 호출하여 (로컬 연결을 즉시 닫을 수 있음) 사용하십시오. Flash 무비가 javascript 호출을 수신하도록하려면 ExternalInterface.addCallback을 살펴보십시오.

0

로드 된 swf에서 해당 클립이 초기화 될 때 정적 변수를 설정합니다. 그런 다음 메인 클립에서 변수가 null이 아닌지 확인하십시오. 이 경우 이미 swf를로드했으며로드를 무시할 수 있습니다.

추가 보너스로 정적 변수의 값을로드 된 swf의 문서 클래스로 설정하면로드 된 swf에 대한 참조도 갖게됩니다.

관련 문제