JsApi有时会被打破

时间:2014-07-09 15:47:39

标签: javascript npapi firebreath

我们正在使用JsApin进行插件和页面js之间的双向通信。 有时这个对象就会停止工作。

以下是我们正在做的事情:

<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对象元素和传递给onload方法的JsApi对象的引用。
当尝试在插件(或属性)上执行方法时,它将首先尝试myObj.jsapi.method(),如果失败,那么&#39; myObj.element.method()`,如果失败那将被报道。

统计数据显示它并非经常发生,但它确实发生了,但我不知道如何重现它,有时会发生。

知道什么可能导致此对象不可用?从js的角度来看,jsapi对象是未定义的,而object元素没有从插件中公开的方法/属性。

感谢。

1 个答案:

答案 0 :(得分:1)

如果不花更多时间查看您的实际项目,很难肯定地说,但这听起来像是您实际上正在卸载和/或重新加载插件。导致这种情况的最常见的事情是当你在DOM中移动它时 - 例如,如果你使用javascript创建对象标记,并在将它放入DOM之前设置.type:

var obj = Document.create("object");
obj.type = "application/x-mytype";

someElement.appendChild(obj);

这似乎是一个好主意,但是当你这样做时,浏览器实际上会部分破坏插件对象。同样,如果您在插件对象或其任何父对象上设置css display: noneoverflow: {anything here},则可能导致此问题。

无论如何,无论如何,我发誓你正在卸载插件,从而使你抓住的jsapi对象无效。