Frage

Wir haben einige html, die wie folgt aussieht:

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

Die JavaScript-Datei enthält so etwas wie folgt aus:

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>');

Im Wesentlichen Ich möchte in der Lage sein, einen Text anzuzeigen oder Standby-Text in Ort zu verlassen, wenn das Objekt nicht richtig geladen werden.

Der Grund für all dies ist, dass wir eine alte App von FoxPro zu .Net zu migrieren versuchen, während es noch in Gebrauch ist. Es ist eine ziemlich große Anwendung und wir einen Bildschirm zu einem Zeitpunkt, zu konvertieren. Wir bauen .Net User Controls und sie werden innerhalb von FoxPro in einem Browser-Objekt angezeigt. Die HTML und js oben können wir die WinForms Benutzersteuerung in einer Webseite eingebettet werden.

Wenn ein bestimmte Benutzer keinen Code Zugriffsgruppe für unsere Anwendungsserver eingerichtet hat, der Benutzer der Kontrolle nicht macht nicht, und der Bildschirm zeigt nur das kleine Symbol in der oberen linken Ecke, die wie versucht, etwas schaut zu laden. Es tut nie Last, aber ich will den Benutzer signalisieren, unser Team per E-Mail ihren Zugang zu bekommen begradigt.

Ich habe versucht, Standby und alt mit, aber weder Text zeigte. Alle unsere Benutzer haben IE7 und das ist nur eine vorübergehende Lösung (<6 Monate).

War es hilfreich?

Lösung

können Sie stellen keine Inline-Elemente in dem Objekt-Tag, und wenn es nicht geladen werden kann, werden sie den Benutzer präsentiert werden.

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

MSDN: OBJECT Element | Objekt Objekt

Wollte ein paar Notizen über ungeradees IE Verhalten hinzuzufügen. (IE <8) Wenn Sie den obigen Code mit dem Ausfall Inhalt angezeigt werden soll, werden Sie Zugriff auf das Objekt in DOM verlieren. Sie wollen also kann es leer zu halten und einige zusätzliche Code tun, um die Last Erfolg zu bestimmen.

<!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>

Rückgabewerte für IE <8

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

Rückgabewerte für W3C-konform

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

selbst ausprobieren

Andere Tipps

eine andere Antwort präziser auf Ihre Situation Hinzufügen.

Ändern Sie Javascript um diese, um die gewünschten Ergebnisse produzieren (wenn es nur die eine Instanz dieses Objekts ist auf die Seite angewendet wird).

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>');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top