2013-08-17 5 views
5

하나의 상위 페이지에서 2 개의 easyXDM 소켓을 사용하려고합니다. 두 소켓은 동일한 원격 도메인에 연결되지만 다른 엔드 포인트에 연결됩니다. 부모 페이지에서하나의 페이지에 여러 개의 easyXDM이 있습니다.

나는 두 JS 기능 activate_false_app()activate_dummy_app()이 - 부모 페이지는 두 개의 false_app_divdummy_app_div 국지적 인은 다음과 div의 표시하는 코드 조각이있다. 그 둘은 분리 완전히 잘 작동입니다 -

window.loadScript = function(src, onload, onerror) { 
    var head = document.getElementByTagName('head')[0]; 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = src; 
    if (script.readyState) { 
     script.onreadystate = function() { 
     var state = this.state; 
     if (state === 'loaded' || state === 'complete') { 
      script.onreadystate = null; 
      onload(); 
     } 
     }; 
    } 
}; 
window.activate_false_app = function() { 
    var exdm_url = 'http://localhost:8000/js/easyXDM/easyXDM.min.js'; 
    on_load_fn = function() { 
     window.init_false_app_communication(); 
    }; 
    on_error_fn = function() { 
     return false; 
    }; 
    window.loadScript(exdm_url, on_load_fn, on_error_fn); 
}; 
window.init_false_app_communication = function() { 
    var false_app_socket = new easyXDM.Socket({ 
     remote : 'http://localhost:8000/false_app', 
     swf : 'http://localhost:8000/js/easyXDM/easyXDM.swf', 
     container : 'false_ap_div', 
     onMessage : function(message, origin) { 
     alert('false_app onMessage'); 
     alert(message); 
     } 
    }); 
}; 
window.activate_dummy_app = function() { 
    var exdm_url = 'http://localhost:8000/js/easyXDM/easyXDM.min.js'; 
    on_load_fn = function() { 
    window.init_dummy_app_communication(); 
    }; 
    on_error_fn = function() { 
    return false; 
    }; 
    window.loadScript(exdm_url, on_load_fn, on_error_fn); 
}; 
window.init_dummy_app_communication = function() { 
    var dummy_app_socket = new easyXDM.Socket({ 
     remote : 'http://localhost:8000/dummy_app', 
     swf : 'http://localhost:8000/js/easyXDM/easyXDM.swf', 
     container : 'dummy_app_div', 
     onMessage : function(message, origin) { 
      alert('dummy_app onMessage'); 
      alert(message); 
     }; 
    }); 
}; 

상위 페이지에, 나도 activate_dummy_app() 또는 activate_false_app()이 작동 호출하는 경우

. 하지만 둘 다 호출하면 그 중 하나만 작동하고 JS 콘솔에서 오류가 발생합니다. 그 중 일부는 정의되지 않습니다 (찾을 수 없음).

또한, 나는 다음 두 작품, 문제는 내가 (이미 init_false_app_communication 이외에) activate_false_app()on_load_fninit_dummy_app_communication을 넣어 두 easyXDMs 때문에 경우 로딩 할 수있는 뭔가가 있음을 알고있다.

그러나 easyXDM이 이미로드되어 있는지 확신 할 수 없으므로 activate_false_appactivate_dummy_app 모두 easyXDM을로드해야하므로 함께 작동 할뿐만 아니라 함께 작동합니다. 내가 noConflict 함수로 작업을 시도했지만 거기에 문서 가난하고 거기에 아무것도 콘크리트로 끝났다.

누군가 비슷한 문제에 직면했거나 내가 무엇을 놓치고 있는지 알고 있습니까?

답변

0

EasyXDM을 사용하면 사이트별로 여러 인스턴스를 가질 수 있습니다. noConflict을 사용하여이 작업을 수행 할 수 있습니다.

예를 들어 제어하지 않는 사이트로 이동하는 JavaScript를 작성하는 경우 언제든지 EasyXDM의 인스턴스를 만들고 원하는 것으로 설정할 수 있습니다.

자바 스크립트 위젯 (the usage can be viewed here)에서이 작업을 수행합니다. 그런 다음 각 스크립트는 ns.NSEasyXDM을 호출하고 전역 네임 스페이스에서 easyXDM을 자르지 않고 참조 할 수 있습니다 (이후 window에 놓기를 원하기 때문에).

여러 끝점과 통화해야하는 경우 필요에 따라 다른 consumerRpcConfigconsumerJsonRpcConfig을 보낼 수 있습니다.

위에 표시된 것처럼 EasyXDM의 여러 복사본을 정의하려면 "noConflict"를 사용하여 각 인스턴스를 변수에 할당하십시오. 그런 다음에 그걸 전달할 수 있습니다.

관련 문제