【问题标题】:Is IE The Only Browser (or version) That Does Not Allow Flash Object Manipulation?IE 是唯一不允许 Flash 对象操作的浏览器(或版本)吗?
【发布时间】:2012-05-03 04:41:57
【问题描述】:

我尝试了多种通过 Javascript 编辑 Flash 对象/嵌入的方法,它似乎可以在除 IE 之外的所有应用程序中使用,所以我正在考虑将 IE 扔出此应用程序的窗口,除非有旧的 + 使用过的版本其他也不允许您编辑对象的浏览器。这方面的一个例子是:

document.getElementById(divID).innerHTML = '<object ...><embed ...><\/embed><\/object>';

或在 jquery 中

var params = '<param name="allowFullScreen" value="true" />' +
             '<param name="allowScriptAccess" value="always" />' +
             '<param name="allowNetworking" value="all" />' +
             '<param name="movie" value="player.swf" />' +
$("#objectPlayer").html(params);

如果所有其他现代浏览器和它们最常用的版本都支持这种编辑,那么我将废弃 IE。在我收到大量 SWFObject JS 框架之前,我不会包含一个用于浏览器的巨大框架,我认为它不会包含我的人口统计数据。

JSFiddle

这是我创建的JSFiddle 的链接。它适用于除 IE8 以外的所有浏览器

【问题讨论】:

  • 虽然您不想使用 SWFObject,但查看源代码并了解它们如何迎合 IE8 用户可能会很有趣。也许您可以使用他们正在使用的修复程序/程序,而不必增加加载整个库的额外开销?
  • 只需更改包含 .swf 扩展名的 src 和值。
  • 我认为 IE8 不会重新加载 SWF 文件,因此您的新参数不会进入电影。尝试更改 src。

标签: javascript jquery html internet-explorer browser


【解决方案1】:

我相信您的代码中的&lt;param&gt;部分是用于&lt;object&gt;

您也必须传递 embed 的名称/值对。

$("#objectPlayer embed").attr({
    "src": "fileName.swf",
    "name": "fileName",
    "allowFullScreen": "true",
    "width": 200,
    "height": 100,
    "type": "application/x-shockwave-flash"

    //and so on...
    });

但无论如何我都会使用 SWFObject,它是行业标准,非常强大,并且是在网站上嵌入 Flash 的最佳方式。

【讨论】:

    【解决方案2】:

    如果我理解您的问题和使用目的,这就是我的建议。

    我会使用SWFObject 将您的SWF 嵌入到您的HTML 页面中。从那里您可以将 flashVars(您可以在其中设置自定义值的对象)传递给您的 SWF。实现这一点并不费力,而且使用起来更干净(在我看来)。 flashVars 的值可以很容易地用 PHP 值设置或用普通值填充。

    查看this 文章,了解有关 SWFObject 和 FlashVars 以及如何在 ActionScript 3 中使用它们的更多信息。

    【讨论】:

    • “在 SWFObject JS 框架泛滥之前,我不会为浏览器添加一个庞大的框架,我认为它不会包含我的人口统计数据。” 〜我问题的最后一段。
    【解决方案3】:

    据我所知,SWFObject 的唯一不错的替代品是 jQuery Tools Flashembed 插件,它被缩小了 3.6k(压缩时更小):

    http://jquerytools.org/demos/toolbox/flashembed/index.html

    下载链接:http://jquerytools.org/download/ 唯一的依赖是 jQuery 本身。

    【讨论】:

      【解决方案4】:

      嗯...奇怪,DOM 不会在 IE8 中正确更新。 这是工作代码。很丑,还有很大的优化空间:

      <div id="player">
      <a href="javascript: void(0)" onclick="build()">Click Me!</a><br />
          <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" type="application/x-shockwave-flash" id="twitchTV" width="600" height="368" style="margin:0px;padding:0px">
      
          <param name="movie" value="http://www.twitch.tv/widgets/live_embed_player.swf?channel=day9tv" />
          <param name="quality" value="high" />
          <param name="bgcolor" value="#ffffff" />
          <param name="allowFullScreen" value="true" />
          <param name="allowScriptAccess" value="always" />
          <param name="allowNetworking" value="all" />
              <embed src="http://www.twitch.tv/widgets/live_embed_player.swf?channel=day9tv" quality="high" bgcolor="#ffffff" width="600" height="368"
          name="videoplayer" align="" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
          </object>     
      
      </div>
      

      JS:

      function build(){
          // Usually the channels are vars, but this is simplified.
          var data = 'http://www.twitch.tv/widgets/live_embed_player.swf?channel=lzgamertv';   // Object Data
          var html = '<a href="javascript: void(0)" onclick="build()">Click Me!</a><br /><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" type="application/x-shockwave-flash" id="twitchTV" width="600" height="368" style="margin:0px;padding:0px"><param name="movie" value="'+data+'" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="allowNetworking" value="all" /><embed src="'+data+'" quality="high" bgcolor="#ffffff" width="600" height="368" name="videoplayer" align="" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></object>';
      
      
           $("#player").html("");
           $("#player").append(html);
      
      
      }
      

      JSFiddle is here

      【讨论】:

        【解决方案5】:

        你可以试试这样的……

        http://jsfiddle.net/eH8cK/

        当您已经重写了几乎大部分内容时,您实际上可以重写播放器的全部内容。

        请尝试让我知道它是否有效。谢谢

        【讨论】:

          【解决方案6】:

          在我的一个项目中,IE8 遇到了一个非常奇怪的错误,这很难发现 - 如果使用 innerHTML 添加画布元素而不是使用 document.createElement/@987654324 添加画布元素,它会使 Google 的 excanvas 失败@。

          我通过获取使用innerHTML 创建的所有canvas 元素并使用DOM 的createElement 方法重新创建它们来修复它。

          我注意到 IE8 中的其他“交互式”元素也存在类似问题,因此建议您尝试一下。

          我没有 IE8 来测试它,但是在这里,try it on jsfiddle

          【讨论】:

            猜你喜欢
            • 2017-08-12
            • 1970-01-01
            • 2017-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-14
            • 2019-07-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多