繁体   English   中英

使用jQuery创建Silverlight容器 - 在IE9中不起作用

[英]Creating Silverlight container with jQuery - does not work in IE9

我有一个使用jQuery动态创建silverlight对象的Web应用程序。

这适用于Chrome和Firefox,但不适用于IE9。

这是一个证明这一点的jsFiddle: http//jsfiddle.net/Bx9we/5/
在此示例中,指向.XAP文件的链接是假的,但您的浏览器至少应显示橙色背景。 (在实际应用程序中,我正在处理.XAP文件是真实的,并且可以在Chrome和Firefox中正确显示)。


可能的红鲱鱼:

我正在使用F12开发人员工具查看生成的HTML。 在firefox和chrome中,它看起来像这样:

<object 
       data="data:application/x-silverlight-2," 
       type="application/x-silverlight-2" 
       id="SilverlightControl" height="292" width="396">
       <!-- continued --!>

但在IE9中,它已将数据字段转换为不同的值。

   <object 
       id="SilverlightControl" 
       data="data:application/x-oleobject;base64,QfXq3+HzJEysrJnDBxUISgAJAADtKAAALR4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" 
       width="396" 
       type="application/x-silverlight-2" 
       height="292">
          <!-- continued --!>

这个问题中讨论了数据标签的转换。


以防jsFiddle未运行:

CSS

div.overlaid
{
    border:3px solid darkgray;
    background:black;
    height:312px;
    width:396px;
    position:absolute;
    top:50px;
    left:50px;
}
.videoPopupCloseLink
{
    position:absolute;
    bottom:6px;
    right:6px;
    color:White;
}

HTML

<button id="createOverlay">Create Overlay</button>

和javascript:

$(function()
  {
      $('div.overlaid').remove();
      $('#createOverlay').click(function() {
            var div = $('<div />')
                .addClass('overlaid')
                .appendTo('body');

            var silverlightSource = './dummy_source.xap';
          var fileName='buy_duff_beer.wmv';
          var entityId=39874;
           var initParams = '<param id="initParams" name="initParams" value="fileName=' + fileName + ',entityid=' + entityId + '" />';
        $('<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="SilverlightControl" height="292" width="396" />')
                            .append($('<param></param>').attr({ name: "source", value: silverlightSource }))
                            .append("<param name='background' value='orange' />")
                            .append("<param name='onerror' value='onSilverlightError' />")
                            .append("<param name='minRuntimeVersion' value='4.0.50826.0' />")
                            .append("<param name='autoUpgrade' value='true' />")
                            .append(initParams)
                            .append('<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none"><img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/></a>')
                            .appendTo(div);

         $('<a />')
                    .addClass('videoPopupCloseLink')
                    .text('close')
                    .click(function () { $('div.overlaid').remove() })
                    .appendTo(div);
}
    );
}
);

好吧,如果你使用正确的HTML,它的工作原理: http//jsfiddle.net/Bx9we/7/

在IE中创建对象标记时,无法创建它,然后将其添加到dom in 2操作中。 您必须在html字符串中创建对象标记,然后将该字符串添加到dom。

$('some html')。appendTo首先创建dom节点 - 它不适用于IE中的object标签。

$(function() {
$('div.overlaid').remove();

  $('#createOverlay').click(function() {

var silverlightSource = './dummy_source.xap';
var fileName='buy_duff_beer.wmv';
    var entityId=39874;

$("body").append('<div class="overlaid"><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="SilverlightControl" height="292" width="396" >\
      <param name="source" value="'+silverlightSource+'"></param>\
      <param name="background" value="orange" ></param>\
      <param id="initParams" name="initParams" value="fileName=' + fileName + ',entityid=' + entityId + '" ></param>\
      </object></div>\
      ');

  });

});

你在64位模式下运行IE吗? SL5支持64位,但SL4不支持。

你最好不要在原始页面(隐藏)中使用Silverlight对象,只需在需要时使用JQuery将其移动到适当的div中吗? 从JS调用该对象是微不足道的(例如告诉它要播放什么)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM