Flash&js&other互调用

在IE浏览器下,将flash对象放在form标签之间,ExternalInterface class就会给你报javascript错,而firefox下完全正常
 有人提出这样的解决办法,将下面这段javascript放在html里的flash之前:
  1. <script type="text/javascript">
  2. function ExternalInterfaceManager()
  3. {
  4.     this.registerMovie = function(movieName) {
  5.         if(!window.fakeMovies) window.fakeMovies = new Array();
  6.         window.fakeMovies[window.fakeMovies.length] = movieName;
  7.     }
  8.     this.initialize = function() {
  9.         if(document.all)
  10.         {
  11.             if(window.fakeMovies)
  12.             {
  13.                 for(i=0;i<window.fakeMovies.length;i++)
  14.                 {
  15.                     window[window.fakeMovies[i]] = new Object();
  16.                 }
  17.                 window.onload = initializeExternalInterface;
  18.             }
  19.         }
  20.  
  21.     }
  22. }
  23. function initializeExternalInterface() {
  24.     for(i=0;i<window.fakeMovies.length;i++) {
  25.         var movieName = window.fakeMovies[i];
  26.         var fakeMovie = window[movieName];
  27.         var realMovie = document.getElementById(movieName);
  28.  
  29.         for(var method in fakeMovie) {
  30.             alert(arguments);
  31.             realMovie[method] = function() {flashFunction = "<invoke name=\"" + method.toString() + "\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 0) + "</invoke>";this.CallFunction(flashFunction);}
  32.         }
  33.  
  34.         window[movieName] = realMovie;
  35.     }
  36. }
  37. var eim = new ExternalInterfaceManager();
  38. eim.registerMovie("ShockwaveFlash1");
  39. eim.registerMovie("ShockwaveFlash2");
  40. eim.initialize();
  41. </script>

    下面是浏览器载入一个包含ExternalInterface调用的flash之后,flash player可能会用到的方法

    1. function __flash__arrayToXML(obj) {
    2.     var s = "<array>";
    3.     for (var i=0; i<obj.length; i++) {
    4.         s += "<property id=\"" + i + "\">" + __flash__toXML(obj[i]) + "</property>";
    5.     }
    6.     return s+"</array>";
    7. }
    8. function __flash__argumentsToXML(obj,index) {
    9.     var s = "<arguments>";
    10.     for (var i=index; i<obj.length; i++) {
    11.         s += __flash__toXML(obj[i]);
    12.     }
    13.     return s+"</arguments>";
    14. }
    15. function __flash__objectToXML(obj) {
    16.     var s = "<object>";
    17.     for (var prop in obj) {
    18.         s += "<property id=\"" + prop + "\">" + __flash__toXML(obj[prop]) + "</property>";
    19.     }
    20.     return s+"</object>";
    21. }
    22. function __flash__escapeXML(s) {
    23.     return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
    24. }
    25. function __flash__toXML(value) {
    26.    var type = typeof(value);
    27.     if (type == "string") {
    28.         return "<string>" + __flash__escapeXML(value) + "</string>";
    29.     } else if (type == "undefined") {
    30.         return "<undefined/>";
    31.     } else if (type == "number") {
    32.         return "<number>" + value + "</number>";
    33. }
posted on 2007-04-16 17:53  彭帅  阅读(561)  评论(0编辑  收藏  举报