سؤال

لدي صفحة ويب html عادية تحتوي على كائن فلاش مضمن.بناءً على وجود سلسلة استعلام، أريد تغيير أحد المعلمات إلى الكائن، لذلك كتبت شيئًا مثل هذا:

<object  ...>
   <param ...>
   <param ...>
   <script type="text/javascript">
      if (window.location.search.indexOf("stuff")>=0) {
          document.write("<param  variant 1>");
      } else {
          document.write("<param variant 2>");
      }
   </script>
</object>

إنه يعمل بشكل رائع في Firefox، لكن IE8 لا ينفذ كود js على الإطلاق.لقد استبدلت البرنامج النصي بأكمله بمكالمة تنبيه بسيطة ("a")، ولم يتم تنفيذ ذلك بواسطة IE8 أيضًا.باستخدام أداة المطور، يمكنني رؤية البرنامج النصي، ولكن لم يتم تمييزه، ولا يمكنني تعيين نقطة توقف فيه، لذلك أنا متأكد من عدم الاعتراف به كبرنامج نصي صالح.

هل هذا تقييد لـ IE أم أنني أفتقد شيئًا ما؟

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

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

المحلول

وأعتقد أن المشكلة تكمن في DOM ومع Internet Explorer على ما يبدو لا المنفذة في خط JavaScipt.

وانتظار النافذة لتحميل قبل initialising، ثم إضافة المعلمات كأطفال (بدلا من كتابة HTML) هو الطريق الصحيح للذهاب، على ما يبدو.

وفيما يلي عملت كما هو متوقع في كل إكسبلورر فايرفوكس وإنترنت.

<html>
<head>
    <script type="text/javascript">

        listen(window, "load", "onload", initiate);

        // called when the window finishes loading
        function initiate() {
            checkStuff();
        }

        function checkStuff() {

            var myObj = document.getElementById("myObj");
            var elm = document.createElement('param');

            if (window.location.search.indexOf("stuff") >= 0){
                elm.setAttribute("name", "param1");
                elm.setAttribute("value", "true");
            } else {
                elm.setAttribute("name", "param2");
                elm.setAttribute("value", "true");
            }

            myObj.appendChild(elm);
        }

        // just a simple function to attach events to objects
        function listen(obj, event_normal, event_alt, func) {
            if (obj.attachEvent) {
                obj.attachEvent(event_alt, func);
            } else if (obj.addEventListener) {
                obj.addEventListener(event_normal, func, false);
            } else {
                obj.addEventListener(event_normal, func, false);
            }
        }

    </script>
</head>
<body>
    <object id="myObj"></object>
</body>
</html>

نصائح أخرى

هل تفشل إذا حاولت ذلك بالطريقة الصحيحة DOM؟ أيضا، هل أنت متأكد من أنك لا تريد variant="1" بدلا من "variant 1"؟ لا تحتاج إلى name السمة مكان ما؟

<object id="foo"></object> 
<script>
if (window.location.search.indexOf("stuff")>=0) {
    var object = document.getElementById('foo'), param = document.createElement('param');
    param.setAttribute('variant', '1'); // not sure if you want variant=1 or variant=variant AND 1=1
    object.appendChild( param );
} else { /* add the rest */ }
</script>

وأنا تجريده من بعض أتش تي أم أل.

لقد كتبت ما يلي بناءً على المثال الخاص بك:

   <script type="text/javascript">
    window.onload = function() {
      if (window.location.search.indexOf("stuff")>=0) {
          alert("stuff!");
      } else {
          alert("nope!");
      }
     };
   </script>

   <object>
       <param />
       <param />
   </object>

ويعمل بشكل جيد في IE8.لقد قمت بإجراء تغييرين أساسيين:

  1. لقد قمت بنقل البرنامج النصي من HTML وجعلته يعمل كوظيفة مرتبطة بحدث التحميل.

  2. لقد غيرت params ليكون XHTML صالحًا أكثر، باستخدام <param /> بدلاً من <param>.

وهذا قد لا يكون الجواب كنت تبحث عنه، ولكن عندما يصل الأمر إلى القيام بأي شيء ديناميكي مع فلاش، أنا فقط والتخلي عن استخدام <لأ href = "http://code.google.com/p/swfobject / "يختلط =" نوفولو noreferrer "> SWFObject . هناك الكثير معقدة والاشياء غير قياسي يحدث عند تقديم فلاش، وأنه يختلف عبر المتصفح، نسخة فلاش، وما إلى ذلك الاعتماد على مكتبة خارجية قد يكون أقل أناقة من إيجاد الحل الأكثر كفاءة وأضيق الحدود مبنية معين الوضع، ولكن يوفر الكثير من الوقت وكنت أقل احتمالا لمعرفة وقت لاحق أنه قد كسر في المتصفح X.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top