swfobject.embedSWF not working?

て烟熏妆下的殇ゞ 提交于 2019-11-26 11:34:08

问题


The following code embedding a Flash animation into an HTML document using SWFObject displays only the alternative content. Why?

<!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>

Chrome, IE and Firefox all show just An animation of a bird taking a shower.

The code is a sample from the book HTML & CSS: design and build websites.


回答1:


SWFObject 2.2 no longer works properly. The bug in SWFObject has already been reported on GitHub, but the library is unmaintained.

The new “HTML by default” Flash policy starting at Chrome 55 does not initialize the variables that SWFObject uses to detect whether Flash is installed. Specifically, navigator.mimeTypes no longer contains application/x-shockwave-flash, unless Flash is enabled by the user. Other browsers have similar issues related to the click-to-run activation scheme introduced as part of Flash’es end of life.

At this time, the best course of action may be to simply use <object> to embed Flash. For example:

<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>

Note that (1) the .swf is specified in two places (2) only the movie param is required; the other params are shown here as an example of what is possible.




回答2:


Chrome's since version 55 does not initialize the variables that swfobject needs to detect if Flash is installed. You can apply primitive patch to swfobject js to skip hasPlayerVersion check:

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


来源:https://stackoverflow.com/questions/40880942/swfobject-embedswf-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!