【问题标题】:Detect flash objects in html code检测 html 代码中的 flash 对象
【发布时间】:2013-06-08 13:04:00
【问题描述】:

我需要检测页面是否包含flash对象,我不是说浏览器支持flash。 你有没有整理出类似的东西?

【问题讨论】:

  • 也许你可以在你的页面内搜索OBJECT标签。
  • 正确!我搜索 swf、object、embed、iframe。但是有什么保证它的 flash 它们也可能代表 iframe 等其他东西可能会显示地图。它们也可能会被评论。我希望有一种 js 方式来做这件事,比如对于脚本,我们有 document.scripts。

标签: javascript html object-tag


【解决方案1】:

modern browsersgiannis 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;
}

您可以使用 jQuery 代替 document.querySelectorAll,这可能会稍微慢一些,但可能适用于所有浏览器。

【讨论】:

    【解决方案2】:

    我的方法是通过文件扩展名将 Flash 对象与其他对象区分开来,例如图片和视频。这是唯一不能省略的。您可以在下面发现一些案例。

    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");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 2013-07-12
      • 1970-01-01
      • 2022-11-26
      • 2011-12-14
      相关资源
      最近更新 更多