Question

Nous avons quelques html qui ressemble à ceci:

<form id="MyUserControl" runat="server" method="post">
   <script language="javascript" src="javascript.js"></script>

Le fichier javascript contient quelque chose comme ceci:

document.write('<object id="MyUserControl" ');
document.write('classid="MyUserControl.dll#MyNamespace.MyUserControl"');
document.write('height="611" width="951" >');
document.write('<param name="Parm1" value="' + parm1 + '" />');
document.write('</object>');

Pour l'essentiel, je voudrais pouvoir afficher du texte ou laisser le texte d'attente en place si l'objet ne se charge pas correctement.

La raison de tout cela est que nous essayons de migrer une ancienne application de FoxPro .Net pendant qu'il est encore en cours d'utilisation. Il est une application assez large et nous la conversion d'un écran à la fois. Nous construisons des contrôles utilisateur .Net et ils sont affichés dans un objet navigateur intérieur de FoxPro. Le code HTML et js nous ci-dessus permettent d'intégrer le contrôle utilisateur WinForms dans une page Web.

Si un utilisateur ne dispose pas d'un groupe d'accès de code pour notre serveur d'applications mis en place, le contrôle utilisateur ne rend pas et l'écran montre juste la petite icône dans le coin supérieur gauche qui ressemble à quelque chose essaie de charger. Il ne fait jamais la charge, mais je veux signaler à l'utilisateur de contacter notre équipe pour obtenir leur accès redressé.

J'ai essayé d'utiliser veille et alt, mais ni montré le texte. Tous nos utilisateurs ont IE7 et cela est juste une solution temporaire (<6 mois).

Était-ce utile?

La solution

Vous pouvez mettre tous les éléments en ligne dans la balise d'objet, et si elle ne se charge pas, ils seront présentés à l'utilisateur.

<object>
  This object failed to load,
  try to install <a href="http://plugin-site/">here</a>
</object>

MSDN: OBJET Element | objet objet

Je voulais ajouter quelques notes sur les comportements bizarres IE. (IE <8) Lorsque vous utilisez le code ci-dessus où le contenu d'échec doit être affiché, vous perdrez l'accès à l'objet DOM. Donc, vous pouvez le garder vide et faire un peu de code supplémentaire pour déterminer le succès de charge.

<!DOCTYPE html>
<html>
<head>
  <title>so-objects</title>
  <script type="text/javascript">

    function add(text) {
      document.body.appendChild(document.createElement("div"))
                   .appendChild(document.createTextNode(text));
    };

    function each(o, f, c) {
      for (var i=0, l=o.length; i<l; i++) f.call(c, o[i], i, o);
    };

    onload = function() {

      // IE returns null and has mysteriously removed the object from DOM
      add("byId = "+ document.getElementById("no-access") );

      // IE returns 2 instead of 3
      add("byTags = "+ document.getElementsByTagName("object").length );

      // verify successful load if the object property is available
      each(document.getElementsByTagName("object"), function(node) {
        add(node.id +" = "+ !!node.object);
      });

    };

  </script>
  <style type="text/css">
    object, span { position: absolute; left:-10000px; }
  </style>
</head>
<body>

  <object id="access">
  </object>

  <object id="no-access">
    <span>failed</span>
  </object>

  <object id="supported"
     classid="clsid:6bf52a52-394a-11d3-b153-00c04f79faa6">
  </object>

</body>
</html>

Les valeurs retournées pour IE <8

byId = null
byTags = 2
access = false
supported = true

Les valeurs retournées pour W3C Compliant

byId = [object HTMLObjectElement]
byTags = 3
access = false
no-access = false
supported = false

Essayez vous-même

Autres conseils

Ajout d'une autre réponse plus précise à votre situation.

Changer votre javascript pour cela peut produire les résultats souhaités (s'il n'y a que l'une instance de cet objet étant appliqué à la page).

function onchange(o) {
  if (o.readyState == 4) {
    if (o.object == null) {
      alert("UserControl is not installed, please email your administrator.");
      // or, toggle display of a message dialog in HTML
      //document.getElementById("not-installed").style.display = "block";
    }
  }
};

document.write('<object id="MyUserControl"');
document.write(' classid="MyUserControl.dll#MyNamespace.MyUserControl"');
document.write(' height="611" width="951" onreadystatechange="onchange(this)">');
document.write(' <param name="Parm1" value="' + parm1 + '" />');
document.write('</object>');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top