2014-07-09 6 views
0

우리는 플러그인과 페이지 js 간의 양방향 통신을 위해 JsApin을 사용하고 있습니다. 때때로이 개체가 작동을 멈추는 경우가 있습니다.JsApi가 가끔 깨집니다.

는 여기에 우리가하고있는 작업은 다음과 같습니다

<object type="..."> 
    ... 
    <param name="onload" value="pluginloaded" /> 
    ... 
</object> 

var myObj = { 
    element: ..., // reference to the dom element for the object tag 
    ... 
} 

function pluginloaded(jsapi) { 
    myObj.jsapi = jsapi; 
} 

당신은 우리가 DOM 객체 요소와 온로드 메소드에 전달되는 JSAPI 객체 모두에 대한 참조를 계속 볼 수 있듯이.
플러그인 (또는 속성)에서 메소드를 실행하려고하면 먼저 myObj.jsapi.method()을 시도하고 실패하면 'myObj.element.method()`가 실패하고 실패하면보고됩니다.

통계에 따르면 매우 자주 발생하지는 않지만 실제로 재현하는 방법은 모르지만 실제로는 발생합니다.

이 개체를 사용할 수 없게하는 원인은 무엇입니까? js 관점에서 jsapi 객체는 정의되지 않았으며 object 요소는 플러그인에서 노출 된 메소드/속성을 가지고 있지 않습니다.

감사합니다.

+0

pluginloaded 함수 호출에서 저장된 jsapi를 사용하거나 html 요소 자체의 메소드에 액세스하는 것이 중요합니까? – taxilian

+0

아니요, 문제가되지 않습니다. 아무 문제가 없으면 (이 문제가 발생할 때) jsapi 개체가 정의되지 않고 요소 자체에 추가 된 메서드/속성이 정의되지 않은 것입니다. 왜 어떤 생각? –

답변

1

실제 프로젝트를 보는 데 더 많은 시간을 들이지 않고도 말하기는 어렵지만 실제로는 플러그인을 언로드하거나 다시로드하는 것처럼 들립니다. 이 문제의 가장 일반적인 원인은 DOM에서 객체 태그를 옮길 때입니다. 예를 들어 자바 스크립트를 사용하여 객체 태그를 만들고 DOM에 넣기 전에 .type을 설정하면 다음과 같습니다.

이것은 좋은 생각 인 것 같습니다. 그러나 브라우저는 실제로 이것을 할 때 실제로 플러그인 객체를 부분적으로 파괴합니다. 마찬가지로, 플러그인 객체 또는 그 부모 중 하나에서 css display: none 또는 overflow: {anything here}을 설정하면이 문제가 발생할 수 있습니다.

어쨌든, 나는 당신이 잡은 jsapi 객체를 무효화하여 플러그인을 언로 드하고 있습니다.

+0

좋습니다. 매우 흥미롭고 잘 알고 있습니다. 나는 이것을 살펴보고 우리가하고있는 것을보고 당신이 묘사 한 것처럼 보이지만, 런타임에이 문제를 파악하고 어떻게 든 그것을 고치는 방법이 있습니까? js 부분은이를 알지만 플러그인에 알릴 수 없습니다. 플러그인이 알 수있는 방법이 있습니까? 그렇다면 js 메서드를 호출하고 새 jsapi 인스턴스로 "재설정"할 수 있습니까? 감사. –

+0

내가 찾은 것이 아닙니다. – taxilian

+1

필자의 마지막 날 실험에서 문제를 재현 할 수 있었던 유일한 방법은 디스플레이 값을 전환하는 것이 었습니다. 문제는 일단 내가 다시 블록으로 변경하면 플러그인은 새로운 jsapi를 전송하는 onload 메소드를 호출하는데,이 경우 우리의 경우에는 문제를 해결해야합니다. 어쨌든 나는 문제를 해결할 솔루션을 생각해 냈습니다. js와 플러그인 사이의 양방향 "펄스"입니다. X 시간이 지난 후에 플러그인이 js로부터 호출을받지 못하면 API가 손상되었다고 가정하고 새로운 것을 전송합니다. 나는 repo를 공유했다 : https://github.com/rounds/FireBreathBrokenJsApi –