>  기사  >  웹 프론트엔드  >  SWF 함수 사용에 대한 JS 액세스 example_javascript 기술

SWF 함수 사용에 대한 JS 액세스 example_javascript 기술

WBOY
WBOY원래의
2016-05-16 15:51:52949검색

이 기사의 예에서는 SWF에 액세스하기 위한 JS의 함수 사용법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

Flash와 JS가 서로 호출하는 사례는 많이 있었습니다. 물론 이는 문제가 되지 않습니다. 물론 호출 오류는 Flash와 JS 사이의 오류가 아닙니다. 오늘은 IE, FF 및 Chrome 간의 비호환성 문제를 완전히 해결하겠습니다. .

Flash에서 외부 JS 기능에 액세스하는 경우

코드 복사만 하면 된다는 것을 알고 있습니다. 코드는 다음과 같습니다.
flash .external.ExternalInterface.call("JS의 함수 이름");
이 문장이면 충분합니다

JS가 Flash의 기능에 액세스하도록 하려면 addCallBack을 사용하여 콜백 함수를 등록하고 JS가 이를 호출하도록 해야 합니다(AS2 예)

import flash.external.*;
var methodName:String = "SetImgPath";
//JS需要调用的函数名字
var instance:Object = null;
var method:Function = extractstr;
//Flash中实际的函数名字,参数忽略,但是你调用的时候要记得有参数的要加上
var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName, instance, method);
trace(wasSuccessful+"-callback")

이때 추적이 가능하다면 등록이 성공한 것입니다

알겠습니다. 아래 웹에서 사용해 보세요.

<div style="margin-left:50px; margin-bottom:50px"><input type="text" id="mytxt" border="1" value="这是测试框,调用页面JS演示" style="width:200px"/></div>
  <div id="flashContent">
   <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="515" height="320" id="123" align="middle">
    <param name="movie" value="123.swf" />
    <param name="quality" value="high" />
    <param name="bgcolor" value="#000000" />
    <param name="play" value="true" />
    <param name="loop" value="true" />
    <param name="wmode" value="transparent" />
    <param name="scale" value="showall" />
    <param name="menu" value="true" />
    <param name="devicefont" value="false" />
    <param name="salign" value="" />
    <param name="allowScriptAccess" value="sameDomain" />
    <!--[if !IE]>-->
    <object type="application/x-shockwave-flash" data="123.swf" width="515" height="320"><!--下面针对非IE内核浏览器--> 
     <param name="movie" value="123.swf" />
     <param name="quality" value="high" />
     <param name="bgcolor" value="#000000" />
     <param name="play" value="true" />
     <param name="loop" value="true" />
     <param name="wmode" value="transparent" />
     <param name="scale" value="showall" />
     <param name="menu" value="true" />
     <param name="devicefont" value="false" />
     <param name="salign" value="" />
     <param name="allowScriptAccess" value="sameDomain" />
    <!--<![endif]-->
     <a href="upload/2011/1/201101281000491420.gif" alt="获得 Adobe Flash Player" />
     </a>
    <!--[if !IE]>-->
    </object>
    <!--<![endif]-->
   </object>
  </div>

자, 이 플래시콜을 호출하기 위해 웹에 버튼을 추가합니다: c0c049655d5fdf22e079f929980a9b4c

테스트해 보세요:

IE6, 7, 8, 9에서는 모든 것이 잘 작동합니다

FF: 실패

크롬: 실패

실패 원인: SetImgPath가 함수가 아닙니다/정의되지 않았습니다)

이것은 매우 이상합니다. 경고를 사용하여 출력할 수 있습니다.

코드 복사 코드는 다음과 같습니다.
thisMovie ("123"): Alert(thisMovie("123"));

출력 결과가 Null이 아닙니다. 즉, Flash를 찾았다는 의미인데 왜 FF와 Chrome에서는 항상 해당 기능을 찾지 못하는 걸까요?

다양한 포럼을 둘러본 후, 등록이 성공하려면 addCallback을 플래시와 함께 로드해야 한다는 의견이 일치했습니다. 그럼, 로드 성공 여부를 확인하기 위해 settimeout 함수를 추가해 보겠습니다.

function flashcall(str){  
     try{   
  thisMovie("123").SetImgPath(str);//注意,123是上面的ID,而SetImgPath是我们Flash中的注册的回调函数
 }cache(e){
  settimeout("flashcall(str)",100 );
       }
}

settimeout을 사용하고 100밀리초마다 호출합니다. 예외가 있으면 성공할 때까지 계속 호출합니다!

아쉽게도 성공하지 못했고 프로그램은 무한 루프에 빠졌습니다!

여러 가지 정보를 상담한 끝에 마침내 그 이유를 찾았습니다:

FF의 브라우저는 embed 태그만 인식하므로, getElementById를 사용하여 플래시를 얻으려면 ID로 embed를 태그해야 합니다. IE는 개체 태그를 인식하므로 개체에 ID를 태그해야 합니다. 🎜>

알고 계시나요? FF와 Chrome에서 Flash는 ID를 식별하기 위해 embed를 사용해야 하며, Object 태그는 ID를 식별할 수 없습니다. 제가 사용하는 HTML은 Flash에서 자동으로 생성되며 모두 Object 태그입니다. , 이는 유해합니다. 오후 동안 디버깅한 후 문제가 여기에 있다는 것을 깨달았습니다.

이제 원인을 알았으니 라벨을 변경하는 것이 더 쉬울 것입니다.

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="515" height="320" id="123" title="123" align="middle">
 <param name="allowScriptAccess" value="always" />
 <param name="movie" value="123.swf">
 <param name="quality" value="high">
  <param name="wmode" value="transparent" />
 <embed src="123.swf" name="123" quality="high" allowScriptAccess="always" swLiveConnect="true" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="515" height="320"></embed>
</object>

Flash에 포함된 태그를 위와 같이 변경하면 모든 것이 OK입니다!

이 기사가 모든 사람의 JavaScript 프로그래밍 설계에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.