Wie nennen dynamisch erstellte flash-externe Schnittstelle im IE mit javascript?

Was ich habe:

  1. Eine swf exportiert eine Funktion, über ExternalInterface
  2. Javascript erstellt neue embed-Objekt und fügt es auf das Dokument
  3. Aufrufen von flash-Funktionen funktioniert in anderen Browsern
  4. Aufrufen von flash-Funktionen nicht in IE 8

Beispiel für den Export von Funktionen in swf:

flash.external.ExternalInterface.addCallback("isActive", ...

Beispiel erstellen Sie den embed-Objekt:

var b = document.createElement('embed');

    b.type = 'application\u002fx-shockwave-flash';
    b.setAttribute('allowFullScreen', 'true');
    b.setAttribute('allowNetworking', 'all');
    b.setAttribute('allowScriptAccess', 'always');
    b.width = 500;
    b.height = 400;
    b.src = 'assets\u002fUltra4.UltraApplication\u002fUltra4.UltraApplication+UltraSprite.swf';

Beispiel des aufrufenden flash externe Schnittstelle in javascript:

   try
    {
      e = b.isActive();
    }
    catch (__exc){ }

Im IE wird es zu fangen mit Nachricht "Objekt unterstützt diese Eigenschaft oder Methode nicht"

Wie es zu lösen ist?

  1. Verwandte: http://bojolais.livejournal.com/251383.html
  2. Verwandte: ExternalInterface funktioniert nicht im IE
  3. Verwandte: http://swfupload.org/forum/generaldiscussion/985
  4. Verwandte: http://code.google.com/p/doctype/wiki/ArticleFixingFlashExternalInterface
  5. Verwandte: http://www.dangerouslyawesome.com/2006/10/20/another-swfobject-problem-deproblemed/
  6. Verwandte: http://www.airtightinteractive.com/news/?p=71

In der script-debugger kann ich sehen, ein Dritter Skript soll die Brücke:

function __flash__arrayToXML(obj) {
    var s = "<array>";
    for (var i=0; i<obj.length; i++) {
        s += "<property id=\"" + i + "\">" + __flash__toXML(obj[i]) + "</property>";
    }
    return s+"</array>";
}
function __flash__argumentsToXML(obj,index) {
    var s = "<arguments>";
    for (var i=index; i<obj.length; i++) {
        s += __flash__toXML(obj[i]);
    }
    return s+"</arguments>";
}
function __flash__objectToXML(obj) {
    var s = "<object>";
    for (var prop in obj) {
        s += "<property id=\"" + prop + "\">" + __flash__toXML(obj[prop]) + "</property>";
    }
    return s+"</object>";
}
function __flash__escapeXML(s) {
    return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
}
function __flash__toXML(value) {
   var type = typeof(value);
    if (type == "string") {
        return "<string>" + __flash__escapeXML(value) + "</string>";
    } else if (type == "undefined") {
        return "<undefined/>";
    } else if (type == "number") {
        return "<number>" + value + "</number>";
    } else if (value == null) {
        return "<null/>";
    } else if (type == "boolean") {
        return value ? "<true/>" : "<false/>";
    } else if (value instanceof Date) {
        return "<date>" + value.getTime() + "</date>";
   } else if (value instanceof Array) {
       return __flash__arrayToXML(value);
   } else if (type == "object") {
       return __flash__objectToXML(value);
   } else {
        return "<null/>"; //???
    }
}
function __flash__addCallback(instance, name) {
  instance[name] = function () { 
    return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
  }
}
function __flash__removeCallback(instance, name) {
  instance[name] = null;
}
  • Ich habe externe interface im IE - schwer zu sagen, alles, ohne dass der code aber.
  • Die anwser mit Quellcode-Beispiel erstellen Sie einfach ein embed-html-element über dom-Funktionen in javascript und dann beweisen die externe Schnittstelle aufgerufen werden können. Meine Erfahrung ist, DH nicht gebunden werden die javascript, um flash-Brücke aus irgendeinem Grund. Vielleicht sollte ich post ein Fehler auf microsoft connect? 🙂
  • Ich habe in der Vergangenheit gesehen, können Sie am Ende mit einer race condition bei der Einrichtung der externen Schnittstelle, nicht sicher, ob der IE8 macht es noch schlimmer, die SetCallback Funktion noch nicht aufgerufen wurde, durch die Zeit, das Skript interagiert mit dem DOM-Objekt.
InformationsquelleAutor zproxy | 2010-01-28
Schreibe einen Kommentar