Les spécifications sont toutes très vagues quant à la façon dont typeof doit se comporter avec un objet plugin, car ECMAScript n'a pas été écrit avec des plugins à l'esprit. Par conséquent, sur IE avec un contrôle activex, il aura tendance à répondre avec "objet" parce que c'est ainsi qu'ils ont décidé de le traiter; Firefox et moi pensons que Safari répond avec "fonction" parce que c'est ainsi qu'ils ont décidé de s'en occuper.
Les deux réponses ont un sens; rappelez-vous que lorsque vous accédez au plugin avec document.getElementById ("myPlugin"), vous n'obtenez pas seulement une référence au plugin, vous obtenez une référence à l'élément HTML qui héberge le plugin, ce qui arrive aux appels proxy le plugin. Étant un élément HTML, il possède d'autres propriétés et méthodes que vous ne connaissez même pas.
Il semblerait que l'objet aurait plus de sens dans ce cas, mais un objet ne le fait généralement pas, ne peut pas avoir une fonction par défaut, et donc je suppose que firefox est déterminé à répondre que c'est une fonction car il y a impossible dans le NPAPI d'interroger pour voir si la fonction par défaut existe, à moins d'appeler InvokeDefault. Si vous pouvez également appeler une méthode par défaut sur une interface ActiveX IDispatch, cela ressemble plus à un effet secondaire accessoire qu'à une fonctionnalité de conception.
Pas une réponse très scientifique, mais qui pourrait aider.
Pouvez-vous l'appeler en tant que fonction? – SLaks
'window.document ['myPlugin']()' mène au navigateur essayant d'invoquer la fonction par défaut - il n'en a pas cependant. –