包含脚本标记的<object>备用内容不会在IE </object>中记录document.write

时间:2009-07-21 23:14:35

标签: html internet-explorer

当用户未安装Silverlight以显示我的Flickr Silvrlight应用程序时,我想将Flickr徽章显示为备用内容。这适用于Firefox,但不适用于IE:

<object width="100%" height="100%" type="application/x-silverlight-2" data="data:application/x-silverlight-2," id="SilverlightObject">
    <param value="/ClientBin/FlickrSilverlightApp.xap" name="source"/>      
    <param value="2.0.31005.0" name="minruntimeversion"/>
    <!-- Flickr Photos -->
    <div id="flickrbadge">
        <h3 class="subheading">Flickr Photos<a target="_blank" href="http://www.flickr.com/photos/tags/monkey/">View All</a></h3>
        <script src="http://www.flickr.com/badge_code_v2.gne?count=8&amp;display=latest&amp;size=s&amp;layout=x&amp;source=all_tag&amp;tag=monkey" type="text/javascript"></script>
    </div>
</object>

正在显示h3标记内容,但不显示Flickr标记。我看了一下Flickr徽章代码的作用。它没什么特别的,但它确实记录了一些内容。 IE不支持标签内的document.write吗?如果没有,我该如何解决呢?

3 个答案:

答案 0 :(得分:3)

不应该是<script src="..."></script>吗?

答案 1 :(得分:1)

在脚本here中有关于document.write的一些细节。我意识到这个特殊的脚本超出了你的控制范围,但它可能会让你了解为什么你会看到行为上的差异。

我尝试了你在IE上使用的徽章链接,直到我对&amp; amp;解码后才生成正确的片段。到&amp;。

HTML和XHTML之间的内容处理方式存在一些差异。检查您的页面是以XHTML格式发送到FF还是HTML格式发送到IE。但是,这只影响内容,不应该对使用src属性的脚本产生任何影响。

对于IE,您可能想尝试使用defer属性。虽然,它是IE特定的,我不知道其他浏览器是否会忽略它或barf。

添加一个以涵盖用户已禁用JS的情况。我不认为这是你的问题,但添加是件好事。

答案 2 :(得分:1)

也许你应该扭转这个问题?如果用户没有安装Silverlight,您应该用Flickr徽章src链接替换对象标签,而不是在对象标签内部放置Flickr徽章?

(简洁地使用jQuery)

$(document).ready(function() {
  if(!Silverlight.IsInstalled()) {
     $("#SilverlightObject").replaceWith("<div id="flickrbadge"><h3 class="subheading">Flickr Photos<a target="_blank" href="http://www.flickr.com/photos/tags/monkey/">View All</a></h3><script src="http://www.flickr.com/badge_code_v2.gne?count=8&amp;display=latest&amp;size=s&amp;layout=x&amp;source=all_tag&amp;tag=monkey" type="text/javascript"></script></div>");

})

当然,您可以将Flickr徽章div +内容放在页面上并使用display:none设置,然后从DOM中抓取并将其插入您想要的位置,而不是使用大型长字符串。这样做的缺点是,即使您不使用脚本,脚本也会下载并执行,从而导致额外的请求。

相关问题