سؤال

لدينا بعض HTML الذي يبدو مثل هذا:

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

يحتوي ملف جافا سكريبت على شيء مثل هذا:

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

في الأساس، أود أن أكون قادرًا على عرض بعض النصوص أو ترك النص الاحتياطي في مكانه إذا لم يتم تحميل الكائن بشكل صحيح.

السبب وراء كل هذا هو أننا نحاول ترحيل تطبيق قديم من FoxPro إلى .Net بينما لا يزال قيد الاستخدام.إنه تطبيق كبير إلى حد ما ونحن نقوم بتحويل الشاشة في كل مرة.نحن نبني عناصر تحكم مستخدم .Net ويتم عرضها في كائن المستعرض داخل FoxPro.يسمح لنا html وjs أعلاه بتضمين عنصر تحكم المستخدم winforms في صفحة الويب.

إذا لم يكن لدى مستخدم معين مجموعة وصول إلى التعليمات البرمجية لإعداد خادم التطبيقات الخاص بنا، فلن يتم عرض عنصر تحكم المستخدم وستعرض الشاشة فقط الرمز الصغير في الزاوية اليسرى العليا الذي يبدو وكأنه شيء ما يحاول التحميل.لا يتم تحميله مطلقًا، ولكني أريد الإشارة إلى المستخدم بإرسال بريد إلكتروني إلى فريقنا لتيسير إمكانية وصوله.

حاولت استخدام وضع الاستعداد والبديل، ولكن لم يظهر أي نص.جميع مستخدمينا لديهم IE7 وهذا مجرد حل مؤقت (أقل من 6 أشهر).

هل كانت مفيدة؟

المحلول

يمكنك وضع أي عناصر مضمنة داخل علامة الكائن، وإذا فشل تحميلها، فسيتم تقديمها للمستخدم.

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

شبكة MSDN:عنصر الكائن | كائن كائن

أردت إضافة بعض الملاحظات حول سلوكيات IE الغريبة.(أي <8) عند استخدام الرمز أعلاه حيث يتم عرض محتوى الفشل ، ستفقد الوصول إلى الكائن في DOM.لذلك قد ترغب في إبقائه فارغًا وإجراء بعض التعليمات البرمجية الإضافية لتحديد مدى نجاح التحميل.

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

القيم التي تم إرجاعها لـ إي <8

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

القيم التي تم إرجاعها لـ متوافق مع W3C

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

حاول بنفسك

نصائح أخرى

وإضافة إجابة أخرى أكثر تحديدا إلى الوضع الخاص بك.

وتغيير جافا سكريبت لذلك قد تؤدي إلى النتائج المرجوة (إذا كان هناك فقط مثيل واحد من هذا الكائن الذي يتم تطبيقه على الصفحة).

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>');
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top