2016-11-30 8 views
1

SWFObject를 사용하여 Flash 문서를 HTML 문서에 포함시키는 다음 코드는 대체 내용 만 표시합니다. 왜?swfobject.embedSWF가 작동하지 않습니까?

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Adding a Flash Movie</title> 
     <script type="text/javascript" 
       src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"> 
     </script> 
     <script type="text/javascript"> 
      swfobject.embedSWF("flash/bird.swf", "bird", "400", "300", "8.0.0"); 
     </script> 
    </head> 
    <body> 
     <div id="bird"> 
      <p>An animation of a bird taking a shower</p> 
     </div> 
    </body> 
</html> 

크롬, IE 및 Firefox는 모두 An animation of a bird taking a shower입니다.

코드는 HTML & CSS: design and build websitesa sample입니다.

+0

플래시 지원은 최근 브라우저의 많은에서 제거됩니다. 사용하기 전에 브라우저 호환성을 확인하십시오. –

+0

브라우저에서 플래시 지원이 제거되지 않습니다. 오히려 플래시는 '활성화 요청'팝업이 나타난 후에 만 ​​활성화됩니다. 유감스럽게도 swfobject는이 새로운 체계에서 작동하지 않습니다. – Chris

+0

플래시는 2020 년에 수명이 다할 것입니다. 그때까지 브라우저 공급 업체는 궁극적으로 지원을 완전히 중단 할 때까지 플래시 사용을 점차 제한 할 것입니다. 답을 편집 한 링크를 참조하십시오. – Palec

답변

7

SWFObject 2.2가 더 이상 제대로 작동하지 않습니다. bug in SWFObject은 GitHub에서 이미보고되었지만 라이브러리가 유지되지 않습니다.

크롬 55에서 시작되는 새로운 "HTML by default"플래시 정책은 SWFObject가 Flash의 설치 여부를 감지하는 데 사용하는 변수를 초기화하지 않습니다. 특히 사용자가 플래시를 사용하지 않는 한 navigator.mimeTypes에는 더 이상 application/x-shockwave-flash이 포함되지 않습니다. 다른 브라우저에서도 Flash’es end of life의 일부로 도입 된 click-to-run activation scheme과 관련된 문제가 있습니다.

현재로서는 <object>을 사용하여 플래시를 삽입하는 것이 가장 좋습니다. 예를 들어

<object type="application/x-shockwave-flash" data="app.swf"> 
    <param name='movie' value="app.swf"/> 
    <param name='bgcolor' value="#999999"/> 
    <param name='FlashVars' value="var1=Hello&var2=Goodbye" /> 
    <param name='allowscriptaccess' value="sameDomain"/> 
</object> 

(1) .SWF에만 movie PARAM이 필요한 두 위치 (2)에 규정되어 있습니다; 여기에 다른 매개 변수가 가능한 예가 나와 있습니다.

3

크롬이 설치된 버전 55는 플래시가 설치된 경우 swfobject가 감지해야하는 변수를 초기화하지 않습니다. 당신은 hasPlayerVersion 검사를 건너 swfobject JS 원시적 패치를 적용 할 수 있습니다

-  if (hasPlayerVersion(swfVersionStr)) { // create SWF 
+  try { // create SWF 
      var obj = createSWF(att, par, replaceElemIdStr); 
      if (att.id == replaceElemIdStr) { 
       setVisibility(replaceElemIdStr, true); 
      } 
      callbackObj.success = true; 
      callbackObj.ref = obj; 
-  } 
-  else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install 
-   att.data = xiSwfUrlStr; 
-   showExpressInstall(att, par, replaceElemIdStr, callbackFn); 
-   return; 
-  } 
-  else { // show alternative content 
+  } catch (e) { // show alternative content 
      setVisibility(replaceElemIdStr, true); 
     } 
+0

'hasPlayerVersion()'이 항상 true를 반환하도록 바꿀 수도 있습니까? –

+0

아니요. 이전 브라우저에서 replaceElemIdStr을 표시하지 않기 때문에 – AndreyP