Domanda

Abbiamo alcuni html che assomiglia a questo:

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

Il file javascript contiene qualcosa di simile:

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

In sostanza, mi piacerebbe essere in grado di visualizzare un testo o lasciare il testo standby in luogo se l'oggetto non viene caricato correttamente.

La ragione di tutto questo è che stiamo cercando di migrazione di un vecchio app da FoxPro a .Net mentre è ancora in uso. Si tratta di una abbastanza grande applicazione e stiamo conversione di una schermata alla volta. Stiamo costruendo Net controlli utente e vengono visualizzati in un oggetto browser all'interno di FoxPro. I html e js sopra ci permettono di incorporare il controllo WinForms utente in una pagina web.

Se un particolare utente non dispone di un gruppo di codice di accesso per il nostro application server set up, il controllo utente non esegue il rendering e lo schermo mostra solo la piccola icona nell'angolo in alto a sinistra che assomiglia a qualcosa sta tentando di caricare. E non lo fa mai carico, ma voglio segnalare l'utente di e-mail il nostro team per avere il loro accesso raddrizzato.

Ho provato ad utilizzare standby e alt, ma nessuno dei due ha mostrato il testo. Tutti i nostri utenti hanno IE7 e questa è solo una soluzione temporanea (<6 mesi).

È stato utile?

Soluzione

È possibile inserire eventuali elementi in linea all'interno del tag object, e se non riesce a caricare, saranno presentati per l'utente.

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

MSDN: OGGETTO Element | oggetto Oggetto

voluto aggiungere alcune note sui comportamenti IE dispari. (IE <8) Quando si utilizza il codice di cui sopra in cui i contenuti fallimento è da visualizzare, si perderà l'accesso all'oggetto in DOM. Quindi si consiglia di tenerlo vuoto e fare qualche codice aggiuntivo per determinare il successo di carico.

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

I valori restituiti per IE <8

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

I valori restituiti per W3C Compliant

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

Provate voi stessi

Altri suggerimenti

L'aggiunta di un'altra risposta più specifica alla vostra situazione.

Modifica della javascript per questo può produrre i risultati desiderati (se c'è solo quella istanza di questo oggetto viene applicato alla pagina).

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>');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top