0

我的公司在整个网站上都使用 Flash。如果浏览器不支持 HTML5,我们想升级到 HTML5,同时继续使用 Flash。Flash 是使用 Google Swiffy 转换的。

我尝试了很多解决方案,但它们太复杂了。这是我目前的想法:我在statement中新建了一个Audio对象try/catch,所以如果浏览器支持它,它会打印Google Swiffy翻译的HTML5代码,但是如果它跳转到catchstatement中,则意味着浏览器不支持HTML5,我将使用旧代码。这是我的代码:

try {
    new Audio();
    // Google Swiffy code here

} catch (er) {
    // Use many lines of "document.write" for old Flash code
    // Many lines for Flash code
}

但是,我无法将 Swiffy 运行时导入代码,因为不支持的浏览器会抱怨运行时脚本,并且它会立即卡住。所以我改变了我的代码,像这样手动导入脚本,但我不知道为什么它不起作用:

try {
    new Audio();

    var js = document.createElement("script");

    js.onload = function() {
        document.body.appendChild(js);

        // Google Swiffy code here
    }

    js.type = "text/javascript";
    js.src = "https://www.gstatic.com/swiffy/v5.2/runtime.js";



} catch (er) {
    alert(er);

    <!--
        displayFlash('abc.swf', 420, 450);
    //-->

    document.write("<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http:\/\/fpdownload.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=6,0,0,0\" width=\"420\" height=\"450\" align=\"middle\"><param name=\"allowScriptAccess\" value=\"always\"><param name=\"movie\" value=\"..\/..\/images\/thap_deluxe.swf\"><param name=\"wmode\" value=\"transparent\"><param name=\"quality\" value=\"high\"><embed src=\"..\/..\/images\/thap_deluxe.swf\" wmode=\"transparent\" menu=\"false\" quality=\"high\" width=\"420\" height=\"450\" allowscriptaccess=\"always\" type=\"application\/x-shockwave-flash\" pluginspage=\"http:\/\/www.macromedia.com\/go\/getflashplayer\"><\/object>");
}

请建议我任何更好的解决方案,或者请教我如何使用当前解决方案解决问题。谢谢你。

4

1 回答 1

0

我认为这是因为您的 js 文件永远不会加载。
它在您将其附加到文档后加载。

试试这样:

try {
    new Audio();

    var js = document.createElement("script");

    js.type = "text/javascript";
    js.src = "https://www.gstatic.com/swiffy/v5.2/runtime.js";

    document.head.appendChild(js); // Add it to the head.

} catch (er) {
    alert(er);

    <!--
        displayFlash('abc.swf', 420, 450);
    //-->

    document.write("<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http:\/\/fpdownload.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=6,0,0,0\" width=\"420\" height=\"450\" align=\"middle\"><param name=\"allowScriptAccess\" value=\"always\"><param name=\"movie\" value=\"..\/..\/images\/thap_deluxe.swf\"><param name=\"wmode\" value=\"transparent\"><param name=\"quality\" value=\"high\"><embed src=\"..\/..\/images\/thap_deluxe.swf\" wmode=\"transparent\" menu=\"false\" quality=\"high\" width=\"420\" height=\"450\" allowscriptaccess=\"always\" type=\"application\/x-shockwave-flash\" pluginspage=\"http:\/\/www.macromedia.com\/go\/getflashplayer\"><\/object>");
}

// 或者如果你想要它在正文中,除非你的整个 try/catch 已经在一个 window.onload 中

代替

document.head.appendChild(js);

和:

window.onload = function(){
    document.body.appendChild(js);
}
于 2013-07-31T08:28:37.243 回答