0

ページにフラッシュ オブジェクトが含まれているかどうかを検出する必要があります。ブラウザーのフラッシュ サポートを意味するわけではありません。似たようなものを整理しましたか?

4

2 に答える 2

1

最新のブラウザー向けのgiannis christofakis の回答の短いバージョン(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 を使用できます。これは少し遅くなる可能性がありますが、おそらくすべてのブラウザーで動作します。

于 2016-08-25T12:22:35.780 に答える
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");
}
于 2013-06-08T16:16:01.427 に答える