2013-06-08 2 views
0

페이지에 플래시 객체가 있는지 감지해야합니다. 브라우저 플래시 지원을 의미하지 않습니다. 비슷한 것을 분류 했습니까?HTML 코드의 플래시 객체 감지

+0

아마도 'OBJECT' 태그에 대한 페이지 내에서 검색 할 수 있습니다. –

+0

이 맞습니다! swf, object, embed, iframe을 검색합니다.하지만 플래시가 iframe과 같은 다른 것들을 나타낼 수도 있다는 보장은 무엇입니까? 그들은 주석을 달 수도 있습니다. 나는이 일을하기위한 js 방법이 있기를 바랍니다. 스크립트의 경우 document.script가 있습니다. – narek

답변

0

내 접근 방식은 사진 및 비디오와 같은 다른 파일 과 플래시 개체를 파일 확장자로 구분하는 것입니다. 그것은 생략 될 수없는 유일한 것입니다. 아래에서 몇 가지 사례를 발견 할 수 있습니다.

function getFileExtension(filename) { 
    //Since you only looking for swf. 
    return filename.substr(filename.length - 3).toUpperCase(); 
    //return filename.split('.').pop().toUpperCase(); 
} 

function isSwfFile(filename) { 
    if (getFileExtension(filename) == "SWF") { 
     return true; 
    } 
    return false; 
} 

function containsSWFObjects() { 

    //Try to get all OBJECT tags 
    var objects = document.getElementsByTagName('object'); 
    var i ,j ; 


    for (i=0; i < objects.length; i++) { 
     //Check for <object width="400" height="400" data="helloworld.swf"></object> 
     var data = objects[i].getAttribute("data"); 
     if (data) { 
      if (isSwfFile(data)) { 
       console.log(data); 
       return true; 
      } 
     } 

     //Check for <param name="movie" value="file.swf"/> 
     //and  <param name="SRC" value="bookmark.swf"> 
     var param = objects[i].getElementsByTagName('param'); 

     for (j=0; j < param.lenght; j++) { 
      var name = param[j].getAttribute("name").toUpperCase(); 
      if (name) { 
       if (name == "MOVIE" || name == "SRC") { 
        if (isSwfFile(param[j].getAttribute("value"))) { 
         console.log(param[j].getAttribute("value")); 
         return true; 
        } 
       } 
      } 
     }   
    } 

    //Check for EMBED tag 
    var embed = document.getElementsByTagName('embed'); 
    for (i=0; i < len; i++) { 
     //Check for <embed src="file.swf"> 
     var src = embed[i].getAttribute('src'); 
     if (src) { 
      if (isSwfFile(src)) { 
       console.log(src); 
       return true; 
      } 
     } 
    } 

    return false; 
} 


if (containsSWFObjects()) { 
    console.log("Contain SWFs"); 
} else { 
    console.log("Doesn't contain SWFs"); 
} 
+0

'jQuery' 지식을 가진 사람이 코드를 축소 할 수 있기를 바랍니다. –

1

modern browsers에 대한 giannis christofakis' answer의 짧은 버전 (IE9 +에서 작동한다) :

function containsSWFObjects() { 
    var s, 
     selectors = [ 
      'object param[name="movie"][value*=".swf"]', 
      'object param[name="src"][value*=".swf"]', 
      'embed[src*=".swf"]', 
      'object[data*=".swf"]' 
     ]; 

    while (s = selectors.pop()) { 
     if (document.querySelectorAll(s).length) { 
      return true; 
     } 
    } 

    return false; 
} 

대신 약간 느려질 수 있습니다있는 document.querySelectorAll의 jQuery를 사용할 수 있지만, 아마도 모든 브라우저에서 작동 .