2009-07-21 8 views
0

Je souhaite afficher un badge Flickr comme contenu alternatif lorsqu'un utilisateur n'a pas installé Silverlight pour afficher mon application Flickr Silvrlight. Cela fonctionne dans Firefox, mais pas dans IE:<object> Le contenu alternatif contenant une balise de script ne document.write pas dans 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> 

Le contenu de la balise h3 est affiché, mais le badge Flickr est pas. J'ai regardé ce que fait le code du badge Flickr. Ce n'est rien d'extraordinaire, mais ça documente. Écrivez du contenu. Est-ce que IE ne supporte pas document.write dans un tag? Si non, comment dois-je contourner cela?

Répondre

1

Peut-être que vous devriez inverser le problème? Au lieu d'avoir le badge Flickr à l'intérieur de votre balise d'objet, vous devez remplacer l'étiquette d'objet par votre lien Flickr src si l'utilisateur n'a pas installé Silverlight.

(en utilisant jQuery par souci de concision)

$(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>"); 

}) 

Bien sûr, plutôt que d'avoir la grande chaîne longue, vous pouvez simplement mettre le badge Flickr div + contenu sur la page avec display: none régler, puis saisir du DOM et insérez-le où vous le voulez. L'inconvénient de cela est que le script va télécharger et exécuter même si vous ne l'utilisez pas, ce qui provoque des demandes supplémentaires.

+0

errrr, les guillemets devraient être correctement échappés aussi, mais meh. – ScottKoon

+0

Vous pouvez également inverser la solution et ajouter simplement la balise d'objet si SL est installée. http://stackoverflow.com/questions/281246/how-can-i-dynamically-add-an-object-tag-with-javascript-in-ie – ScottKoon

3

Cela ne devrait-il pas être <script src="..."></script>?

+0

Il est fermé par le/à la fin: corymathews

+0

Échantillon de code mis à jour à . Toujours pas d'exécution. –

1

Il y a quelques détails sur document.write dans les scripts here. Je me rends compte que ce script particulier est hors de votre contrôle, mais il pourrait éclaircir pourquoi vous voyez la différence dans le comportement.

J'ai essayé le lien de badge que vous avez sur IE et il n'a pas généré de fragment approprié jusqu'à ce que j'ai décodé l'ampli &; à &.

Il existe certaines différences sur la façon dont le contenu est traité entre HTML et XHTML. Vérifiez si votre page est livrée en XHTML à FF et en HTML à IE. Cependant, cela n'affecte que le contenu et ne devrait avoir aucun effet sur les scripts utilisant l'attribut src.

Pour IE, vous pouvez essayer l'attribut defer. Cependant, c'est spécifique à l'IE, et je ne sais pas si d'autres navigateurs vont l'ignorer ou l'écarter.

Ajoutez un pour couvrir le cas où l'utilisateur a désactivé JS. Je ne pense pas que ce soit votre problème, mais c'est une bonne chose à ajouter.

+0

Bon point, essayez de remplacer '&' juste '&' –

Questions connexes